Php curl返回不完整的数据

时间:2012-11-02 06:50:49

标签: php curl

我正在尝试使用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行。在卷曲中,我得到大约350行的HTML。

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

任何帮助?

2 个答案:

答案 0 :(得分:0)

服务器可能正在使用元刷新或某种错误进行响应。检查响应标题......这是一个开始的好地方

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

您还应该使用http_build_query()

将您的帖子字段作为字符串发送,而不是数组
$formFields = http_build_query( array('username' => 'XXXX', 'password' => 'WAO', 'button' => 'Login'));

答案 1 :(得分:0)

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

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

您可以通过比较cURL的输出和浏览器与javascript-disabled的输出并找到它们相同来验证上述声明。