recaptcha ruby​​脚本

问题描述:

我正在编写一个应用程序,用户需要在浏览器之外解决一个recaptcha图像,基本上他们会从这样的页面看到图像http://www.google.com/recaptcha/api/noscript?k=6Lf5YAcAAAAAAILdm73fp007vvmaaDpFb6A5HLJP,提交解决方案,程序将执行休息。recaptcha ruby​​脚本

我正在使用机械化来自动化与该页面的交互,并且由于某种原因它总是给我一个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 

嗯,我已经解决了这个问题。显然,机械化在标题中发送了不正确的“内容长度”。手动执行请求(从net/http发布)使其工作。

他们可能会做一些浏览器识别的除了检查用户代理,如检查头部中的数据的顺序。但这只是猜测。代码示例将有所帮助。

+1

嗯,这是一些非常疯狂的猜测。 – pguardiario

+0

他们还能做些什么? –

几乎一样吗?尝试发送完全相同的标题。

agent = Mechanize.new 

headers = { 
    "Content-Type" => "application/x-www-form-urlencoded", 
    "User-Agent" => "MyAgent", 
    "Referer" => "Bob" 
} 

agent.post(url, {:foo => 'bar'}, headers) 

如果这样行不通,请查看cookie。

+0

嗯,那也不管用。就cookie而言,我会看什么样的东西? –

+0

它们在您的脚本请求中与您的Chrome请求中的相同。重点是使脚本请求与chrome请求相同。 Wireshark不是很友好,你可以尝试一下提琴手或查尔斯代理来并排检查它们。 – pguardiario