简体   繁体   English

如何使用 HTTParty on Rails 使用 XML 数据体发出 POST 请求

[英]How do you make POST request with a XML data body using HTTParty on Rails

I'm currently trying to make an api call to a server which just accepts my data in form of an xml.我目前正在尝试对服务器进行 api 调用,该服务器仅以 xml 的形式接受我的数据。 I tried calling the service from postman and it works like a charm.我尝试从邮递员那里调用该服务,它的作用就像一个魅力。

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"

Now I tried to implement this api call in Ruby on Rails using the following code, but sadly I'm getting an ERROR 500 everytime.现在我尝试使用以下代码在 Ruby on Rails 中实现这个 api 调用,但遗憾的是我每次都收到 ERROR 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

Do you have any tips to make this work?你有什么技巧可以使这项工作顺利进行吗?

I assume that the 500 error code is from your controller and not from the API call.我假设 500 错误代码来自您的控制器而不是来自 API 调用。 If you check the log files you will see more details.如果您检查日志文件,您将看到更多详细信息。 I'm taking a guess:我猜猜:

You are handing a HTTP Response to render but ask it to render it as XML.您正在处理要render的 HTTP 响应,但要求它将其呈现为 XML。

Try尝试

render xml: response.body

instead.反而。

Maybe putting instruct tag at top of body can work,也许在 body 顶部放置 instruct 标签可以工作,

:body => '<?xml version="1.0" encoding="UTF-8"?><Request LanguageCode="en"...

Hope it helps希望能帮助到你

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM