0

我正在尝试使用 ruby​​/rails 构建一个免费的 Web 应用程序它应该能够通过各种移动运营商的在线表格发送短信。(就像这个(俄语))。

所以,我需要

  • 等待想要通过我的网站发送短信的用户。
  • 建立与运营商网站的连接。可能,使用机械化。
  • 检索验证码
  • 向用户显示验证码
  • 允许用户输入消息和验证码
  • 在运营商网站上提交表格(带有消息、验证码、电话号码)

在整个过程中,与运营商网站的连接应该是活动的(否则验证码会改变)。据我了解,每次发送短信时,我都需要创建一个(子)进程。您能否告知在 rails\ruby 中处理此问题的最佳方法是什么?

我对网络开发还是很陌生...我应该使用线程吗?叉子?弹出?使用 PTY?一些外部宝石?我应该如何与我的流程沟通?

4

2 回答 2

2

假设运营商的网站没有什么特别之处,不,您不需要在整个过程中保持连接。一般来说,网页上的表单是这样工作的:您访问 URL,您的网络浏览器会下载包含表单的页面。在您的情况下,它还将有一个 <img> 标签或类似的标签来显示验证码。一旦您的浏览器下载了该页面,连接就会被切断。填写表格并单击提交后,您的 Web 浏览器会打开与服务器的新连接并发送数据,服务器会发送响应(单击提交后显示的任何页面)。

您的程序所要做的就是模仿这种体验。所以:1)下载带有表格的页面。刮掉表单字段(确保您不会错过任何隐藏的字段 - 使用 CAPTCHA 可能会有一些)和 CAPTCHA。2) 建立一个页面来向您的用户展示包括验证码和一个包含他们需要填写的所有字段的表单。如果原始表单中有隐藏字段,请确保您也包含它们的值(作为表单中的隐藏字段),因为当用户提交您的表单时,您将需要它们。3) 然后,当用户提交您的表单时,将数据(包括隐藏值和用户为 CAPTCHA 输入的内容)发送给操作员。4)最后,检查运营商是否指示成功,并建立一个页面告诉你的用户。

如果您在 Rails 中执行此操作,您的控制器中可能有两种方法:一种称为“show”(上面的第 1 步和第 2 步),它将从操作员的站点上抓取 CAPTCHA 和其他信息并向用户显示您的表单视图,以及一个称为“发送”(上面的步骤 3 和 4)的表单将提交到的视图,它将获取他们的数据并将其发送到运营商的网站,收集响应并告诉您的用户是否成功或不。

注意:您需要先阅读运营商的服务条款,然后再进行任何操作。我相当肯定这种事情会违反他们的 TOS,如果他们注意到您的服务器以他们的方式发送大量请求,他们会很快阻止您。

于 2009-11-18T15:26:09.957 回答
1

要回答您的另一个问题,您可以使用 DRb 或 background_job(又名 BJ)在后台实际完成发送,以便在您的用户提交验证码后,他们不必等待响应。或者您可以将其包装在 ajax 中,并让 DRb/BJ 进程在发送短信时通知您,以便您可以通知用户成功或任何问题。

通常在 Ruby 中打开线程是需要避免的,因为有很多很棒的 gem 可以满足我们的需要。并不是说你不应该使用线程,只是在大多数情况下它可能已经做得很好了。

于 2009-11-18T16:34:33.017 回答