如何将 post XML 字符串转换为 api Ruby 法拉第
How to post XML string to api Ruby Faraday
我尝试使用 Ruby 的法拉第库来为我的 API 发出下一个 post 请求:
需要添加 API-Key = "xxxxxxxxxxxxxxx" 到我的 header 并发送 XML inside body
<time_entry>
<issue_id>1</issue_id>
<activity_id>9</activity_id>
<hours>1.0</hours>
<comments>Test</comments>
</time_entry>
在 postman 那里工作得很好,但在我使用 Faraday 库时就不行了。
我的代码是:
require 'faraday'
xml = %&<time_entry><issue_id>1</issue_id><activity_id>9</activity_id><hours>1.0</hours><comments>automatic spent time</comments></time_entry>&
faraday = Faraday.new do |f|
f.request :multipart
f.request :url_encoded
f.adapter :net_http
f.headers["API-Key"]="xxxxxxxxxxxxxxx"
end
payload = {xml: xml}
faraday.post("http://localhost:3000/time_entries.xml", payload)
我遇到下一个错误:
Completed 422 Unprocessable Entity in 8ms (Views: 0.4ms | ActiveRecord: 2.0ms)
Completed 406 Not Acceptable in 19ms (ActiveRecord: 2.9ms)
我使用另一种方法 - 我发送 JSON 而不是 XML,并使用 'net/http'
require "json"
require 'net/http'
uri = URI("http://localhost:3000/time_entries.xml")
我创建了一个新的 Post 请求,正文为 JSON,效果很好。
req = Net::HTTP::Post.new(uri, 'Content-Type' => 'application/json')
req["X-Redmine-API-Key"]="xxxxxxxxxxxxxxxxxxxx"
req.body = {time_entry: {issue_id:1, activity_id:9,hours: hours, comments: "Test" }}.to_json
res = Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(req)
end
我尝试使用 Ruby 的法拉第库来为我的 API 发出下一个 post 请求: 需要添加 API-Key = "xxxxxxxxxxxxxxx" 到我的 header 并发送 XML inside body
<time_entry>
<issue_id>1</issue_id>
<activity_id>9</activity_id>
<hours>1.0</hours>
<comments>Test</comments>
</time_entry>
在 postman 那里工作得很好,但在我使用 Faraday 库时就不行了。
我的代码是:
require 'faraday'
xml = %&<time_entry><issue_id>1</issue_id><activity_id>9</activity_id><hours>1.0</hours><comments>automatic spent time</comments></time_entry>&
faraday = Faraday.new do |f|
f.request :multipart
f.request :url_encoded
f.adapter :net_http
f.headers["API-Key"]="xxxxxxxxxxxxxxx"
end
payload = {xml: xml}
faraday.post("http://localhost:3000/time_entries.xml", payload)
我遇到下一个错误:
Completed 422 Unprocessable Entity in 8ms (Views: 0.4ms | ActiveRecord: 2.0ms)
Completed 406 Not Acceptable in 19ms (ActiveRecord: 2.9ms)
我使用另一种方法 - 我发送 JSON 而不是 XML,并使用 'net/http'
require "json"
require 'net/http'
uri = URI("http://localhost:3000/time_entries.xml")
我创建了一个新的 Post 请求,正文为 JSON,效果很好。
req = Net::HTTP::Post.new(uri, 'Content-Type' => 'application/json')
req["X-Redmine-API-Key"]="xxxxxxxxxxxxxxxxxxxx"
req.body = {time_entry: {issue_id:1, activity_id:9,hours: hours, comments: "Test" }}.to_json
res = Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(req)
end