2009-10-08 92 views
1

我原本以爲我會用curl來做這個,但看起來我錯了。我需要做的是捕獲一篇文章,並進行一些數據庫查找以進行驗證,然後將驗證的數據發佈到遠程URL。做服務器端驗證然後發佈到遠程腳本

我已經通過填充html表單並使用javascript提交它,但這有明顯的缺陷。我想構建一個帖子併發送瀏覽器,就好像他們發佈了一個表單到遠程url。

我在捲曲文件中丟失了什麼?什麼是好的™這樣做的方法?

回答

2

您可以使用捲曲來做到這一點。

但是,您可能還有其他問題需要思考。當瀏覽器物理地發佈到另一個url時,Cookie,會話等被設置。從服務器發佈時,這些可能不會被設置。您還應該查看SO上的屏幕抓取問題以瞭解更多信息。

假設情況並非如此,您應該能夠獲得帖子,驗證字段並使用curl重新發布。有manymanyexamplesdoing this

編輯

  • 後形式的server.php
  • 過程/使用捲曲remote.service
+0

感謝您的迴應,特別是編輯!大衛沃爾什的例子是我所需要的。我在curl_setopt選項中迷路了。 – jerrygarciuh 2009-10-08 20:43:15

2

我驗證字段server.php

  • 後驗證參數沒有嘗試過,但我會做的是將表單提交給它的最終目的地並添加一個javascript onSubmit()函數,它向服務器發送ajax請求並返回true或false。

    也就是說,如果你能依靠的JavaScript ...

  • +0

    這是一個很好的方法,不需要任何服務器端資源。 – 2009-10-08 20:22:41

    +0

    只要您不關心用戶是否知道最終URL是什麼,就可以接受這種做法,讓他們有機會將想要的任何數據發佈到最終目的地。 – 2009-10-08 20:24:31

    +0

    @Matt Huggins:非常真實。如果你想避免這種情況,你當然可以有相同的Ajax請求返回/設置最終目的地。 – jeroen 2009-10-08 20:30:33

    2

    只要有請求/響應是這樣的:

    +---------+ request +--------+ curl request +--------+ 
    |   | -----------> |  | ---------------> |  | 
    | browser |    | url #1 |     | url #2 | 
    |   | <----------- |  | <--------------- |  | 
    +---------+ response +--------+ curl response +--------+ 
    

    坐在瀏覽器背後的用戶將無法受益知道最終的URL(上面的url#2)是什麼,因爲它不在HTML源代碼中,所以它們不會破解並且手動跳過中間人URL(url#1)。

    1

    我發現發出「wget」比CURL更容易管理。

    $remoteContent = `wget -o - http://someremoteurl`; 
    

    除此之外,馬特的回答是正確的。但是,如果您從屏幕截圖的遠程站點獲得的響應中包含鏈接,則必須搜索並替換它們(如果您想自己處理它們) - 那麼您將創建代理服務器。 ...

    -CF