我正在编写一个应用程序,用户需要在浏览器外部解析重新映射图像,基本上他们会看到像http://www.google.com/recaptcha/api/noscript?k=6Lf5YAcAAAAAAILdm73fp007vvmaaDpFb6A5HLJP这样的页面中的图像,提交解决方案,程序会做其余的。
我正在使用mechanize来自动化与该页面的交互,由于某种原因,它总是给我一个500响应代码。我已经尝试用机械化设置useragent无济于事。我有点不知应该做什么,因为我已经检查过(使用wireshark)机械化发送/接收的数据包,并将它们与我使用chrome获取代码的数据包进行比较,它们看起来几乎相同! (这是一个帖子消息,他们有相同的参数等,并发布到同一个地方)
我很确定这是显而易见的事情,但我仍然在与它斗争了好几个小时,并希望得到一些帮助。
编辑代码
agent = Mechanize.new do |i|
i.user_agent_alias = 'Mac Safari'
i.log = Logger.new 'captcha.log'
end
agent.get(captcha_url) do |google_page| # captcha_url is a url like the one above
form = google_page.forms.first
form.recaptcha_response_field = captcha_text # captcha_text is user-input
form.
form.submit # this line is where the error is
end
答案 0 :(得分:1)
几乎相同?尝试发送完全相同的标题。
agent = Mechanize.new
headers = {
"Content-Type" => "application/x-www-form-urlencoded",
"User-Agent" => "MyAgent",
"Referer" => "Bob"
}
agent.post(url, {:foo => 'bar'}, headers)
如果不起作用,请查看Cookie。
答案 1 :(得分:0)
除了检查用户代理之外,他们可能会进行某种浏览器识别,例如检查标头中数据的顺序。但那只是猜测。 代码示例将有所帮助。
答案 2 :(得分:0)
我已经解决了这个问题。显然,机械化在标题中发送了一个不正确的“内容长度”。手动执行请求(使用net / http发布)可以使其正常工作。