recaptcha ruby​​脚本

时间:2011-11-18 08:25:11

标签: ruby mechanize recaptcha

我正在编写一个应用程序,用户需要在浏览器外部解析重新映射图像,基本上他们会看到像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

3 个答案:

答案 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发布)可以使其正常工作。