2012-11-02 44 views
3

我想用php curl登錄一個用戶名和密碼的網站。PHP捲曲返回不完整的數據

<?php 
$url = 'http://XXXXX.com/login'; 
$ch = curl_init(); 
$formFields = array('username' => 'XXXX', 'password' => 'WAO', 'button' => 'Login'); 
$cookiefile = 'C:/wamp/www/tests/cookies.txt'; 

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 
curl_setopt($ch, CURLOPT_HEADER, TRUE); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $formFields); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile); 

echo $response = curl_exec($ch); 
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
curl_close($ch); 

但我沒有得到完整的HTML $迴應。意思是如果在瀏覽器中,我在HTML中獲得1000行。捲曲我得到350行左右的html。

它在工作,但突然停止工作。

任何幫助?

+1

我懷疑這是一個網絡連接相關的問題。 – Prasanth

+0

爲了更清楚的理解,請用 替換回顯行$ response = curl_exec($ ch); echo'

',htmlentities($response),'
'; –

+0

我在使用代理時遇到過幾次,代理會以http狀態200返回不完整的響應! – joshweir

回答

0

服務器可能會響應元刷新或某種錯誤。檢查響應頭......這是開始

$response = curl_exec($ch); 
print_r(curl_getinfo($ch)); 

你也應該送你的帖子領域的字符串,而不是一個數組的好地方使用http_build_query()

$formFields = http_build_query(array('username' => 'XXXX', 'password' => 'WAO', 'button' => 'Login')); 
+0

你能解釋'進一步迴應元刷新'嗎? – Prasanth

+1

服務器可以通過302狀態碼或元刷新標籤來請求瀏覽器進行刷新。我不認爲捲曲會跟隨元刷新 –

0

如果頁面你正在加載的是通過Ajax將內容加載到頁面上,你會明顯得到不同的結果。而且,您提到的網站似乎通過ajax請求加載內容。

cURL不/不能解析javascript,因此無法通過ajax加載內容。因此,您無法獲得與正常瀏覽器相同的內容。

您可以通過比較cURL的輸出和browser-with-javascript-disabled的輸出並發現它們相同來驗證上述說法。

+0

禁用javascript後,我仍然得到不同的輸出。 http://stackoverflow.com/questions/13190637/php-curl-is-returning-incomplete-data/13192035#comment17956712_13190637 此外,我認爲沒有人會添加與ajax :) –

+0

非常真實。我錯過了。 – Prasanth