簡體   English   中英

Php curl返回不完整的數據

[英]Php curl is returning incomplete data

我試圖用php curl登錄一個用戶名和密碼的網站。

<?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);

但是我沒有在$ response中獲得完整的html。 意思是如果在瀏覽器中我在html中得到1000行。 在curl我得到大約350行的HTML。

它以前工作但突然停止工作。

有幫助嗎?

服務器可能正在響應元刷新或某種錯誤。 檢查響應標頭......這是一個好的起點

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

您還應該使用http_build_query()將您的帖子字段作為字符串發送,而不是數組

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

如果您要加載的頁面是通過Ajax將內容加載到頁面上,那么顯然會有不同的結果。 並且,您提到的網站似乎確實通過ajax請求加載內容。

cURL沒有/無法解析javascript,因此無法通過ajax加載內容。 因此,您無法獲得與普通瀏覽器完全相同的內容。

您可以通過比較cURL的輸出和瀏覽器與javascript-disabled的輸出並找到它們相同來驗證上述語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM