Aks*_*hat 1 ruby post ruby-on-rails http
我试图使用Nets/HTTP来使用POST
并放入自定义用户代理.我通常使用open-uri
但它不能做到POST
吗?
我用
resp, data = Net::HTTP.post_form(url, query)
Run Code Online (Sandbox Code Playgroud)
如何将其更改为自定义标头?
编辑我的查询是:
query = {'a'=>'b'}
Run Code Online (Sandbox Code Playgroud)
你可以尝试这个,例如:
http = Net::HTTP.new('domain.com', 80)
path = '/url'
data = 'form=data&more=values'
headers = {
'Cookie' => cookie,
'Content-Type' => 'application/x-www-form-urlencoded'
}
resp, data = http.post(path, data, headers)
Run Code Online (Sandbox Code Playgroud)
你不能post_form
这样做,但你可以这样做:
uri = URI(url)
req = Net::HTTP::Post.new(uri.path)
req.set_form_data(query)
req['User-Agent'] = 'Some user agent'
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
Run Code Online (Sandbox Code Playgroud)
(阅读net/http 文档了解更多信息)
我需要将 json 发布到带有自定义标头的服务器。我看过的其他解决方案对我来说不起作用。这是我的有效解决方案。
uri = URI.parse("http://sample.website.com/api/auth")
params = {'email' => 'someemail@email.com'}
headers = {
'Authorization'=>'foobar',
'Date'=>'Thu, 28 Apr 2016 15:55:01 MDT',
'Content-Type' =>'application/json',
'Accept'=>'application/json'}
http = Net::HTTP.new(uri.host, uri.port)
response = http.post(uri.path, params.to_json, headers)
output = response.body
puts output
Run Code Online (Sandbox Code Playgroud)
感谢 Mike Ebert 的 tumblr: http://mikeebert.tumblr.com/post/56891815151/posting-json-with-nethttp