[英]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.