Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php curl正在返回不完整的数据_Php_Curl - Fatal编程技术网

Php curl正在返回不完整的数据

Php curl正在返回不完整的数据,php,curl,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, CURLOP

我正试图登录一个网站的用户名和密码与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);

服务器可能会以元刷新或某种错误进行响应。检查响应标题…这是一个很好的开始

$response = curl_exec($ch);
print_r(curl_getinfo($ch));
您还应该使用http\u build\u query()将post字段作为字符串而不是数组发送


如果您正在加载的页面是通过Ajax将内容加载到页面上的,那么显然会得到不同的结果。而且,您提到的站点似乎确实通过ajax请求加载内容

cURL不能解析javascript,因此不能通过ajax加载内容。因此,您无法获得与普通浏览器完全相同的内容


您可以通过将cURL的输出和浏览器与禁用javascript的输出进行比较来验证上述说法,并发现它们是相同的。

我怀疑这是一个与网络连接相关的问题。为了更清楚地理解,请将echo line替换为$response=cURL\u exec($ch);回显“”,htmlentities($response),“”;我有过几次使用代理的经验,代理会返回http状态为200的不完整响应!服务器可以通过多种方式请求浏览器刷新…通过302状态代码或元刷新标记。我不认为curl会跟随meta-refresh,在禁用javascript之后,我仍然得到不同的输出。此外,我认为没有人会使用ajax添加:)
$formFields = http_build_query( array('username' => 'XXXX', 'password' => 'WAO', 'button' => 'Login'));