我正在尝试使用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。
以前工作但突然停止了工作。
任何帮助?
答案 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的输出并找到它们相同来验证上述声明。