【问题标题】:Ruby sending xml to serverRuby 将 xml 发送到服务器
【发布时间】:2014-02-24 20:57:44
【问题描述】:

我是网络编程的新手,现在在将一些 xml 数据发送到服务器时遇到问题。

我有以下代码:

require "net/http"
require "net/https"
require "uri"

xml = <<XML
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?><data appname="dhl_entwicklerportal" language-code="de" password="Dhl_123!" request="get-status- for-public-user"><data piece-code="034234"></data></data>
XML

uri = URI('https://cig.dhl.de/services/sandbox/rest/sendungsverfolgung')

nhttp = Net::HTTP.new(uri.host, uri.port)
nhttp.use_ssl=true
nhttp.verify_mode=OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Get.new(uri)
request.basic_auth 'hidden', 'hidden'
response = nhttp.start {|http|
  http.request(request, xml: xml)
}

puts response.body

虽然我得到了一些回应,但这不是正确的。由于某种原因,它没有正确发送正文(我的 xml)。如果我手动输入 URL:

https://cig.dhl.de/services/sandbox/rest/sendungsverfolgung?xml=<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?><data appname="dhl_entwicklerportal" language-code="de" password="Dhl_123!" request="get-status- for-public-user"><data piece-code="034234"></data></data>

它有效。

---------------编辑------- ------------

我按照 Alex Wayne 的解决方案编辑了上面的代码。现在我得到这个错误:

d:/Ruby200/lib/ruby/2.0.0/net/http/generic_request.rb:179:in `send_request_with_body': undefined method `bytesize' for #<Hash:0x29bcff8> (NoMethodError)

【问题讨论】:

    标签: ruby xml net-http


    【解决方案1】:

    HTTP GET 请求不能有正文,因此第二个参数用于作为查询字符串附加到 url 的数据。您可能想使用支持真实请求正文的POST

    http.request_post(request, xml)
    

    更新:我想我误解了...

    根据有效的查询字符串,它与GET 一起使用。但它期望 XML 在?xml= 之后。所以你需要将你的请求体/查询字符串编码为一个哈希值,xml 作为键,xml 字符串作为值。

    所以不是这样:

    http.request(request, xml)
    # GET http://domain.com/path?<myxml></myxml>
    

    但是这个:

    http.request(request, xml: xml)
    # GET http://domain.com/path?xml=<myxml></myxml>
    

    【讨论】:

    • 谢谢,但现在我收到一个错误 d:/Ruby200/lib/ruby/2.0.0/net/http/generic_request.rb:179:in send_request_with_body': undefined method bytesize' for # (NoMethodError).
    猜你喜欢
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多