ruby - 需要帮助使用 Ruby net/http 将 xml 属性列表作为 HTTP 正文发送

标签 ruby xml post net-http

下面的脚本可以工作,但是我收到了 400“错误请求”响应,因为 POST 必须将以下 XML 数据包含到 HTTP 正文中。我一直在尝试不同的方法来完成这件事,但没有成功。有人能指出我正确的方向吗?

XML 属性文件:

<?xml version="1.0" encoding="UTF-8"?>
<spa:data xmlns:spa="http://www.Sparrow.com/" object="Sparrow.PropertyList.1">
               <spa:proplist>
                              <spa:propval name="username">jer</spa:propval>
               </spa:proplist>
</spa:data>

Ruby 代码:

#!/usr/bin/env ruby
require 'net/http'
require 'net/https'
require 'rest-client'
require 'base64'


uri = URI.parse('http://sparrow:3453/rest/api/enum')
xml_data = %{<?xml version="1.0" encoding="UTF-8"?>
<spa:data xmlns:spa="http://www.Sparrow.com/" object="Sparrow.PropertyList.1">
<spa:proplist>
<spa:propval name="username">jer</spa:propval>
</spa:proplist>
</spa:data>}
res = req.post(uri.path, xml_data, {'Content-Type' => 'text/xml', 'Content-Length' =>  xml_data.length.to_s, "User-Agent" => "VAS-UCIP/3.1/1.0", "Connection" => "keep-alive" })
puts res.body
req = Net::HTTP::Post.new(uri)

puts "Authenticating..."
req.basic_auth 'user', 'secret'
puts "Authenticated..."
#req.ssl = false

puts "Sending XML data..."


puts "Starting HTTP request..."
res = Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(req)
end

case res
when Net::HTTPSuccess, Net::HTTPRedirection
# OK
else
res.value
end
#puts res.body

最佳答案

使用以下内容:

   #!/usr/bin/env ruby
  require 'net/http'
  require 'base64'
  uri = URI.parse('http://www.google.com')
  req = Net::HTTP.new(uri.hostname, uri.port)
  xml_data = %{<?xml version="1.0" encoding="UTF-8"?>
  <spa:data xmlns:spa="http://www.Sparrow.com/" object="Sparrow.PropertyList.1">
                 <spa:proplist>
                                <spa:propval name="username">jer</spa:propval>
                 </spa:proplist>
  </spa:data>}
  user_and_pass = username + ':' + password #replace username and password with your username and password as strings
  base64user_and_pass = Base64.encode64(user_and_pass)
  res = req.post(uri.path, xml_data, {'Content-Type' => 'text/xml', 'Content-Length' => xml_data.length.to_s, 'Authorization' => "Basic #{base64user_and_pass}", "Connection" => "keep-alive" })
  puts res.body

关于ruby - 需要帮助使用 Ruby net/http 将 xml 属性列表作为 HTTP 正文发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20750253/

相关文章:

ruby-on-rails - 成功发送延迟作业电子邮件后更新用户表

javascript - 通过 JavaScript 访问 XML

python解析xml以获取大于给定值的字符串

xml - rvest 不提取自关闭 xml 节点

python - Google App Engine json 发布请求正文

python - 接收空表格的 flask

Ruby/删除匹配的键/哈希数组后的所有内容

ruby - 如何在 Nokogiri Ruby 中取消转义 HTML,所以 & 仍然是 & 而不是 &

ruby - 在 Ruby 对象类中创建数组

python - Azure 上的 Flask 应用程序为 POST 请求提供 400 错误代码