假设运营商的网站没有什么特别之处,不,您不需要在整个过程中保持连接。一般来说,网页上的表单是这样工作的:您访问 URL,您的网络浏览器会下载包含表单的页面。在您的情况下,它还将有一个 <img> 标签或类似的标签来显示验证码。一旦您的浏览器下载了该页面,连接就会被切断。填写表格并单击提交后,您的 Web 浏览器会打开与服务器的新连接并发送数据,服务器会发送响应(单击提交后显示的任何页面)。
您的程序所要做的就是模仿这种体验。所以:1)下载带有表格的页面。刮掉表单字段(确保您不会错过任何隐藏的字段 - 使用 CAPTCHA 可能会有一些)和 CAPTCHA。2) 建立一个页面来向您的用户展示包括验证码和一个包含他们需要填写的所有字段的表单。如果原始表单中有隐藏字段,请确保您也包含它们的值(作为表单中的隐藏字段),因为当用户提交您的表单时,您将需要它们。3) 然后,当用户提交您的表单时,将数据(包括隐藏值和用户为 CAPTCHA 输入的内容)发送给操作员。4)最后,检查运营商是否指示成功,并建立一个页面告诉你的用户。
如果您在 Rails 中执行此操作,您的控制器中可能有两种方法:一种称为“show”(上面的第 1 步和第 2 步),它将从操作员的站点上抓取 CAPTCHA 和其他信息并向用户显示您的表单视图,以及一个称为“发送”(上面的步骤 3 和 4)的表单将提交到的视图,它将获取他们的数据并将其发送到运营商的网站,收集响应并告诉您的用户是否成功或不。
注意:您需要先阅读运营商的服务条款,然后再进行任何操作。我相当肯定这种事情会违反他们的 TOS,如果他们注意到您的服务器以他们的方式发送大量请求,他们会很快阻止您。