我原本以爲我會用curl來做這個,但看起來我錯了。我需要做的是捕獲一篇文章,並進行一些數據庫查找以進行驗證,然後將驗證的數據發佈到遠程URL。做服務器端驗證然後發佈到遠程腳本
我已經通過填充html表單並使用javascript提交它,但這有明顯的缺陷。我想構建一個帖子併發送瀏覽器,就好像他們發佈了一個表單到遠程url。
我在捲曲文件中丟失了什麼?什麼是好的™這樣做的方法?
我原本以爲我會用curl來做這個,但看起來我錯了。我需要做的是捕獲一篇文章,並進行一些數據庫查找以進行驗證,然後將驗證的數據發佈到遠程URL。做服務器端驗證然後發佈到遠程腳本
我已經通過填充html表單並使用javascript提交它,但這有明顯的缺陷。我想構建一個帖子併發送瀏覽器,就好像他們發佈了一個表單到遠程url。
我在捲曲文件中丟失了什麼?什麼是好的™這樣做的方法?
您可以使用捲曲來做到這一點。
但是,您可能還有其他問題需要思考。當瀏覽器物理地發佈到另一個url時,Cookie,會話等被設置。從服務器發佈時,這些可能不會被設置。您還應該查看SO上的屏幕抓取問題以瞭解更多信息。
假設情況並非如此,您應該能夠獲得帖子,驗證字段並使用curl重新發布。有manymanyexamples的doing this。
編輯
我驗證字段server.php
也就是說,如果你能依靠的JavaScript ...
這是一個很好的方法,不需要任何服務器端資源。 – 2009-10-08 20:22:41
只要您不關心用戶是否知道最終URL是什麼,就可以接受這種做法,讓他們有機會將想要的任何數據發佈到最終目的地。 – 2009-10-08 20:24:31
@Matt Huggins:非常真實。如果你想避免這種情況,你當然可以有相同的Ajax請求返回/設置最終目的地。 – jeroen 2009-10-08 20:30:33
只要有請求/響應是這樣的:
+---------+ request +--------+ curl request +--------+
| | -----------> | | ---------------> | |
| browser | | url #1 | | url #2 |
| | <----------- | | <--------------- | |
+---------+ response +--------+ curl response +--------+
坐在瀏覽器背後的用戶將無法受益知道最終的URL(上面的url#2)是什麼,因爲它不在HTML源代碼中,所以它們不會破解並且手動跳過中間人URL(url#1)。
我發現發出「wget」比CURL更容易管理。
$remoteContent = `wget -o - http://someremoteurl`;
除此之外,馬特的回答是正確的。但是,如果您從屏幕截圖的遠程站點獲得的響應中包含鏈接,則必須搜索並替換它們(如果您想自己處理它們) - 那麼您將創建代理服務器。 ...
-CF
感謝您的迴應,特別是編輯!大衛沃爾什的例子是我所需要的。我在curl_setopt選項中迷路了。 – jerrygarciuh 2009-10-08 20:43:15