Ruby HTTP POST表单错误

时间:2015-07-21 09:30:11

标签: ruby curl

非常感谢一点帮助。

当我在Linux下使用curl执行此操作时,一切正常:

curl --data "password=myPassW0&true=1" http://www.myserver.com/adminapi/admin.php?method=login

当我尝试使用Ruby时,我会搞乱并出错:

require 'net/http'
require 'net/https'
require 'openssl'

uri = URI.parse("http://www.myserver.com")
http = Net::HTTP.new(uri.host, uri.port)

if uri.port == 443 then http.use_ssl = true end
request = Net::HTTP::Post.new("/adminapi/admin.php")
request.body = {'method' => 'login', 'password' => 'myPassW0', 'true' => '1'}
response = http.request(request)

puts response

知道我错在哪里吗?谢谢!

编辑:

刚刚调试它,使用curl我得到了这个原始数据:

POST /adminapi/admin.php?method=login HTTP/1.1
User-Agent: curl/7.21.0 (x86_64-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.15 libssh2/1.2.6
Host: localhost
Accept: */*
Content-Length: 35
Content-Type: application/x-www-form-urlencoded

password=myPassW0&true=1

但是对于红宝石我得到了这个,这是错误的:

POST /adminapi/admin.php HTTP/1.1
Accept: */*
Content-Type: application/x-www-form-urlencoded
Connection: close
Content-Length: 3
Host: localhost

passwordmyPassW0true1methodlogin

1 个答案:

答案 0 :(得分:0)

由于没有回答,我自己找到了一个肮脏的解决方案,使用:

uri = URI("http://www.myserver.com/adminapi/admin.php?method=login")
res = Net::HTTP.post_form(uri, 'method' => 'login', 'true' => '1', 'password' => 'PassW0')