POST JSON 来自 ruby 的 Curl Multi 数据
POST JSON data with Curl Multi from ruby
我正在使用 curb gem 使用 JSON 数据做 Curl Multi post。但是,我无法真正获取参数以进行 posted,并且一直无法弄清楚如何正确配置参数。
urls = [
{
:url => "http://localhost:5000/",
:method => :post,
:headers => {'Accept' => 'application/json', 'Content-Type' => 'application/json'},
:post_fields => {'field1' => 'value1', 'k' => 'j'}
}
]
Curl::Multi.http(urls) do |easy, code, method|
puts "#{easy.body_str.inspect}, #{method.inspect}, #{code.inspect}"
end
=>
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\">\n<title>400 Bad Request</title>\n<h1>Bad Request</h1>\n<p>The browser (or proxy) sent a request that this server could not understand.</p>\n", :post, nil
这样做:
urls = [
{
:url => "http://localhost:5000/",
:method => :post,
:headers => {'Accept' => 'application/json', 'Content-Type' => 'application/json'},
:post_fields => {},
:post_body => {'field1' => 'value1', 'k' => 'j'}.to_json,
}
]
问题:路边不知道你在发送JSON数据。遏制不阅读和解释:headers
的内容。如你所见here,curb 将你的哈希转换为由“&”分隔的字符串,这是默认的正常(non-json)http 数据发送(例如:"field1=value1&k=j") .当服务器 (Rails) 读取并解释 header 明确表示数据为 JSON 格式时,它会尝试解码,结果与您在执行时得到的异常相同即:JSON.parse("field1=value1&k=j")
.
要解决此问题,您需要将 "post_fields" 作为空哈希发送,并使用 "post_body" 发送您的实际数据。此外,您需要使用 to_json
.
手动将哈希值转换为 json
我不知道他们(路缘项目所有者)是否知道这个问题,但我建议您警告他们。
我正在使用 curb gem 使用 JSON 数据做 Curl Multi post。但是,我无法真正获取参数以进行 posted,并且一直无法弄清楚如何正确配置参数。
urls = [
{
:url => "http://localhost:5000/",
:method => :post,
:headers => {'Accept' => 'application/json', 'Content-Type' => 'application/json'},
:post_fields => {'field1' => 'value1', 'k' => 'j'}
}
]
Curl::Multi.http(urls) do |easy, code, method|
puts "#{easy.body_str.inspect}, #{method.inspect}, #{code.inspect}"
end
=>
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\">\n<title>400 Bad Request</title>\n<h1>Bad Request</h1>\n<p>The browser (or proxy) sent a request that this server could not understand.</p>\n", :post, nil
这样做:
urls = [
{
:url => "http://localhost:5000/",
:method => :post,
:headers => {'Accept' => 'application/json', 'Content-Type' => 'application/json'},
:post_fields => {},
:post_body => {'field1' => 'value1', 'k' => 'j'}.to_json,
}
]
问题:路边不知道你在发送JSON数据。遏制不阅读和解释:headers
的内容。如你所见here,curb 将你的哈希转换为由“&”分隔的字符串,这是默认的正常(non-json)http 数据发送(例如:"field1=value1&k=j") .当服务器 (Rails) 读取并解释 header 明确表示数据为 JSON 格式时,它会尝试解码,结果与您在执行时得到的异常相同即:JSON.parse("field1=value1&k=j")
.
要解决此问题,您需要将 "post_fields" 作为空哈希发送,并使用 "post_body" 发送您的实际数据。此外,您需要使用 to_json
.
我不知道他们(路缘项目所有者)是否知道这个问题,但我建议您警告他们。