2012-04-24 143 views
0

我有一个代码问题(此代码可能获得请求&下载生成的文件):保存红宝石文件机械化

require 'rubygems' 
require 'mechanize' 
require 'hpricot' 

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE 

user = "xxx" 
pass = "xxx" 
auth_key = "xxx" 
ip = "xxx" 

agent = Mechanize.new 
page = agent.get("https://#{ip}/cgi-bin/welcome.cgi") 
form = page.forms.first 
form.username = user 
form.password = Digest::MD5.hexdigest(pass + auth_key) 
page = agent.submit form 

page = agent.get("https://#{ip}/cgi-bin/config.exp") 
form = page.forms.first 
agent.pluggable_parser.default = Mechanize::FileSaver 
agent.post("https://#{ip}/cgi-bin/config.exp", {"submitstatus" => "1"}) 

有了这个,我有一个错误:

/var/lib/gems/1.8/gems/mechanize-2.4/lib/mechanize/http/agent.rb:291:in `fetch': 400 => Net::HTTPBadRequest for https://31.223.225.133/cgi-bin/config.exp -- unhandled response (Mechanize::ResponseCodeError) 
from /var/lib/gems/1.8/gems/mechanize-2.4/lib/mechanize.rb:407:in `get' 
from /home/lord/Dropbox/work/ruby/ruby_backup/backup.ru:22 

如何模拟此wget请求下载文件:

`wget --no-check-certificate --load-cookies cookie --post-data='submitstatus=1' \ 
--header='Host: 10.1.25.254' \ 
--header='User-Agent: Mozilla/5.0' \ 
--header='Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \ 
--header='Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3' \ 
--header='Accept-Encoding: gzip, deflate' \ 
--header='Connection: keep-alive' \ 
--header='Referer: https://10.1.25.254/sys_setting.htm' \ 
--header='Content-Type: application/x-www-form-urlencoded' \ 
--header='Content-Length: 14' \ 
https://$ip/cgi-bin/config.exp` 

高级谢谢

+0

感谢,问题就解决了: .POST(URL,POSTDATA,{ '定制报头'=> '自定义'}) – 2012-04-25 11:01:55

回答

0

如果您通过调试代理(如fiddler或charles)来代理机械化和wget请求,则可以将它们并排比较,从而更好地理解问题。