如何在 Rails 上使用 HTTParty 使用 XML 数据主体发出 POST 请求
How do you make POST request with a XML data body using HTTParty on Rails
我目前正在尝试对服务器进行 api 调用,该服务器仅以 xml 的形式接受我的数据。
我试着从邮递员那里打电话给这项服务,它就像一个魅力。
curl -v -X POST -H "x-apiKey: 83202136355d1704350fb3ef596ac126" -H "Content-Type: application/xml" -d '<Request LanguageCode="en" emailAddress="your email" mobileNumber="+4477....." gate="212" boardingHHMM="18:40" departHHMM="19:10" arriveHHMM="20:30" ffMiles="" DepartTerminal="Term 2" ffTier="" message="Sample" CabinName="Economy" > <Barcode firstName="Arie" lastName="van der Veek" title="MR" bookingRef="PNR123" depAirportCode="AMS" arrAirportCode="CDG" carrier="XS" flightNumber="56" depDate="2015-06-06" classCode="Y" seatNumber="21B" seqNumber="002" ffAirline="ZZ" ffNumber="123456789" ticketNumber="000123456789012" issuingCarrier="ZZ" /> </Request>' "https://dev2dbp.api.aero/api/ZZ"
现在我尝试使用以下代码在 Rails 上的 Ruby 中实现此 api 调用,但遗憾的是我每次都收到错误 500。
class FlightTicketController < ApplicationController
# get 'flight_ticket/get_ticket'
def get_ticket
response = HTTParty.post(
"https://dev2dbp.api.aero/api/ZZ",
:headers => {"x-apiKey" => "83202136355d1704350fb3ef596ac126","Content-Type" => "application/xml"},
:body => '<Request LanguageCode="en" emailAddress="your email" mobileNumber="+4477....." gate="212" boardingHHMM="18:40" departHHMM="19:10" arriveHHMM="20:30" ffMiles="" DepartTerminal="Term 2" ffTier="" message="Sample" CabinName="Economy" > <Barcode firstName="Arie" lastName="van der Veek" title="MR" bookingRef="PNR123" depAirportCode="AMS" arrAirportCode="CDG" carrier="XS" flightNumber="56" depDate="2015-06-06" classCode="Y" seatNumber="21B" seqNumber="002" ffAirline="ZZ" ffNumber="123456789" ticketNumber="000123456789012" issuingCarrier="ZZ" /> </Request>'
)
render xml: response
end
end
你有什么技巧可以使这项工作成功吗?
也许将 instruct 标签放在 body 顶部可以工作,
:body => '<?xml version="1.0" encoding="UTF-8"?><Request LanguageCode="en"...
希望对您有所帮助
我假设 500 错误代码来自您的控制器,而不是来自 API 调用。如果您检查日志文件,您将看到更多详细信息。我在猜:
您正在将 HTTP 响应传递给 render
,但要求它呈现为 XML。
尝试
render xml: response.body
相反。
我目前正在尝试对服务器进行 api 调用,该服务器仅以 xml 的形式接受我的数据。 我试着从邮递员那里打电话给这项服务,它就像一个魅力。
curl -v -X POST -H "x-apiKey: 83202136355d1704350fb3ef596ac126" -H "Content-Type: application/xml" -d '<Request LanguageCode="en" emailAddress="your email" mobileNumber="+4477....." gate="212" boardingHHMM="18:40" departHHMM="19:10" arriveHHMM="20:30" ffMiles="" DepartTerminal="Term 2" ffTier="" message="Sample" CabinName="Economy" > <Barcode firstName="Arie" lastName="van der Veek" title="MR" bookingRef="PNR123" depAirportCode="AMS" arrAirportCode="CDG" carrier="XS" flightNumber="56" depDate="2015-06-06" classCode="Y" seatNumber="21B" seqNumber="002" ffAirline="ZZ" ffNumber="123456789" ticketNumber="000123456789012" issuingCarrier="ZZ" /> </Request>' "https://dev2dbp.api.aero/api/ZZ"
现在我尝试使用以下代码在 Rails 上的 Ruby 中实现此 api 调用,但遗憾的是我每次都收到错误 500。
class FlightTicketController < ApplicationController
# get 'flight_ticket/get_ticket'
def get_ticket
response = HTTParty.post(
"https://dev2dbp.api.aero/api/ZZ",
:headers => {"x-apiKey" => "83202136355d1704350fb3ef596ac126","Content-Type" => "application/xml"},
:body => '<Request LanguageCode="en" emailAddress="your email" mobileNumber="+4477....." gate="212" boardingHHMM="18:40" departHHMM="19:10" arriveHHMM="20:30" ffMiles="" DepartTerminal="Term 2" ffTier="" message="Sample" CabinName="Economy" > <Barcode firstName="Arie" lastName="van der Veek" title="MR" bookingRef="PNR123" depAirportCode="AMS" arrAirportCode="CDG" carrier="XS" flightNumber="56" depDate="2015-06-06" classCode="Y" seatNumber="21B" seqNumber="002" ffAirline="ZZ" ffNumber="123456789" ticketNumber="000123456789012" issuingCarrier="ZZ" /> </Request>'
)
render xml: response
end
end
你有什么技巧可以使这项工作成功吗?
也许将 instruct 标签放在 body 顶部可以工作,
:body => '<?xml version="1.0" encoding="UTF-8"?><Request LanguageCode="en"...
希望对您有所帮助
我假设 500 错误代码来自您的控制器,而不是来自 API 调用。如果您检查日志文件,您将看到更多详细信息。我在猜:
您正在将 HTTP 响应传递给 render
,但要求它呈现为 XML。
尝试
render xml: response.body
相反。