你的:collector
和:footer
不正确。
我写了一个小 Sinatra 服务来接收带有任何参数的 POST 请求:
require 'pp'
require 'sinatra'
post "/*" do
pp params
end
然后运行它,在我的 Mac OS 笔记本电脑上启动网络服务器。与 Sinatra 应用程序一样,它位于 0.0.0.0:4567。
运行此代码:
require 'httparty'
url = HTTParty.post(
"http://localhost:4567/api/v2/emails?survey=1",
:headers => {
'Content-Type' => 'application/x-www-form-urlencoded',
'Accept' => 'application/x-www-form-urlencoded'
},
:body => {
"subject" => 'subject',
"sender" => 'sender',
"message" => 'message',
},
:collector => 'collector',
:footer => 'footer'
)
puts url
输出:
["survey", "1"]["subject", "subject"]["sender", "sender"]["message", "message"]["splat", ["api/v2/emails"]]["captures", ["api/v2/emails"]]
辛纳特拉 说:
127.0.0.1 - - [2013 年 9 月 11 日 17:58:47] “POST /api/v2/emails?survey=1 HTTP/1.1”200 - 0.0163
{"调查"=>"1",
“主题”=>“主题”,
“发件人”=>“发件人”,
“消息”=>“消息”,
"splat"=>["api/v2/emails"],
“捕获”=>[“api/v2/电子邮件”]}
更改:collector
和:footer
为字符串并将它们移动到身体内,它们应该在哪里:
require 'httparty'
url = HTTParty.post(
"http://localhost:4567/api/v2/emails?survey=1",
:headers => {
'Content-Type' => 'application/x-www-form-urlencoded',
'Accept' => 'application/x-www-form-urlencoded'
},
:body => {
"subject" => 'subject',
"sender" => 'sender',
"message" => 'message',
'collector' => 'collector',
'footer' => 'footer'
},
)
puts url
输出:
["survey", "1"]["subject", "subject"]["sender", "sender"]["message", "message"]["collector", "collector"]["footer", "footer"]["splat", ["api/v2/emails"]]["captures", ["api/v2/emails"]]
辛纳屈说:
127.0.0.1 - - [2013 年 9 月 11 日 18:04:13] “POST /api/v2/emails?survey=1 HTTP/1.1”200 - 0.0010
{"调查"=>"1",
“主题”=>“主题”,
“发件人”=>“发件人”,
“消息”=>“消息”,
“收藏家”=>“收藏家”,
“页脚”=>“页脚”,
"splat"=>["api/v2/emails"],
“捕获”=>[“api/v2/电子邮件”]}
问题是,POST 请求仅使用 URL 和:body
哈希。在:body
散列中包含您发送到服务器的所有变量。这就是为什么第二个版本的代码,with 'collector'
and 'footer'
works。