2009-11-18 33 views
0

我正嘗試使用ruby/rails構建一個免費的Web應用程序它應該能夠通過各種移動運營商的在線表單發送短信。 (如this one(俄語))。Ruby/RoR和許多子進程

所以,我需要

  • 等待用戶,誰願意通過我的網站發送短信。
  • 建立與運營商網站的連接。可能使用機械化。
  • 獲取驗證碼
  • 顯示驗證碼給用戶
  • 允許用戶輸入信息和驗證碼
  • 提交表單上運營商網站(有消息,驗證碼,電話號碼)

到連接運營商網站應該在這個過程中保持活躍(否則驗證碼將會改變)。據我所知,每次發送短信都需要創建一個(子)進程。 您能否請告知在rails \ ruby​​中處理這個問題的最佳方法是什麼?

我對web開發還是比較陌生...... 我應該使用線程嗎?叉? popen方法?使用PTY?一些外在的寶石?我應該如何與我的過程溝通?

回答

2

假設運營商的網站沒有什麼特別的,不,你不需要在整個過程中保持連接。一般來說,網頁上的表單的工作方式如下:您訪問網址,您的網絡瀏覽器下載包含表單的頁面。在你的情況下,它也會有一個標記或類似的標記來顯示CAPTCHA。一旦您的瀏覽器下載了該頁面,連接就會中斷。填寫完表單並點擊提交後,您的Web瀏覽器會打開一個到服務器的新連接併發送數據,服務器會發送其響應(單擊提交後顯示的任何頁面)。

您所有的程序都要模擬這種體驗。所以:1)下載帶有表單的頁面。颳去表單字段(確保你不會錯過任何隱藏字段 - 驗證碼可能會有一些)和驗證碼。 2)建立一個頁面,向你的用戶顯示包含CAPTCHA的用戶以及填寫他們需要的所有字段的表單。如果原始表單中存在隱藏的字段,請確保您包含它們的值(作爲表單中的隱藏字段),因爲當用戶提交表單時,您將需要它們。 3)然後,當用戶提交表單時,將數據(包括隱藏值和用戶輸入的驗證碼)發送給運營商。 4)最後,檢查操作員是否表示成功,並建立一個頁面告訴你的用戶。

如果你在Rails中這樣做,你的控制器中可能有兩種方法:一種叫做例如'show'(上面的步驟1和步驟2),它將從操作員站點刮取CAPTCHA和其他信息並向用戶顯示你的表單視圖, '發送'(上面的第3步和第4步)表單將提交給誰,哪些人將他們的數據發送給運營商的網站,收集響應並告訴用戶它是否成功。

注意:在打擾任何此類操作之前,您需要閱讀操作員的服務條款。我相當肯定這種事情會違揹他們的TOSes,如果他們發現你的服務器以他們的方式發送了很多請求,他們會很快阻止你。

+0

沒錯。你不需要保持連接打開,即使你這樣做也不會對驗證碼產生任何影響。只要確保提交所有隱藏的字段以及表單。 OMG! – mtyaka 2009-11-18 15:34:59

+0

OMG!約旦,米塔卡 - 非常感謝!顯然,我喜歡過分複雜的事情...... 約旦 - 感謝你這麼好的回答!我剛剛發現我沒有足夠的聲望(<15),所以我無法將我的投票添加到您的答案中,對不起。 (但我會,一旦我得到15代表) 再次感謝。 – Konstantin 2009-11-18 15:54:00

1

要回答您的另一個問題,您可以使用DRb或background_job(又名BJ)在後臺實際完成發送,以便在用戶提交驗證碼後,他們不必等待響應。或者你可以把它封裝在ajax中,讓DRb/BJ進程在發送短信的時候通知你,這樣你可以通知用戶成功或者任何問題。

通常在Ruby中打開線程是可以避免的,因爲有很多偉大的寶石可以滿足我們的需求。並不是說你不應該使用線程,只是大多數情況下它可能已經做得很好。

+0

感謝您的提示! 我一定會使用這個插件之一。 – Konstantin 2009-11-19 12:40:56