Php curl返回不完整的数据

我正在尝试使用php curl登录带有用户名和密码的网站。</ p>

< pre> &lt;?php
$ url ='http://XXXXX.com/login';
$ch = curl_init();
$ formFields = array('username'=&gt;'XXXX ','password'=&gt;'WAO','button'=&gt;'登录');
$ cookiefile ='C:/wamp/www/tests/cookies.txt';

ncurl_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 );
; ncurl_setopt($ ch,CURLOPT_COOKIEJAR,$ cookiefile);

echo $ response = curl_exec($ ch);
$ httpcode = curl_getinfo($ ch,CURLINFO_HTTP_CODE);
curl_close($ ch);
< / code> </ pre>

但是我没有在$ response中获得完整的html。 意思是如果在浏览器中我在html中得到1000行。 在curl中我得到大约350行html。</ p>

它之前正在工作但突然停止工作。</ p>

任何帮助?</ p> \ n </ div>

展开原文

原文

I am trying to login a site with username and password with 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);

But I am not getting complete html in $response. Mean if in browser i am getting 1000 lines in html. In curl I am getting around 350 lines of html.

It was working before but suddenly stopped working.

Any help?

dongyulan6251
dongyulan6251 我在使用代理时经历过几次,代理会返回http状态为200的不完整响应!
接近 5 年之前 回复
doudong2149
doudong2149 为了更清楚地理解,请用$response=curl_exec($ch)替换echoline;echo'<pre>',htmlentities($response),'</pre>';
接近 8 年之前 回复
duannaxin9975
duannaxin9975 我怀疑这是一个与网络连接相关的问题。
接近 8 年之前 回复

2个回答



服务器可能正在使用元刷新或某种错误进行响应。 检查响应头...这是一个好的起点</ p>

  $ response = curl_exec($ ch); 
print_r(curl_getinfo($ ch));
</ code> </ pre>

您还应该使用http_build_query()</ p>

  $ formFields =将您的帖子字段作为字符串发送,而不是数组 http_build_query(array('username'=&gt;'XXXX','password'=&gt;'WAO','button'=&gt;'登录')); 
</ code> </ pre>
</ DIV>

展开原文

原文

The server could be responding with a meta refresh or an error of some sort. Check the response headers...it's a good place to start

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

You should also be sending your post fields as a string, not an array by using http_build_query()

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

dongqian6234
dongqian6234 服务器有几种方法可以通过302状态代码或元刷新标记请求浏览器刷新。 我认为卷曲不会跟随元刷新
接近 8 年之前 回复
dongzi5673
dongzi5673 你能进一步解释'用元刷新回应'吗?
接近 8 年之前 回复



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

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

您可以通过比较cURL的输出和浏览器与javascript来验证上述语句 -disabled的输出并发现它们是相同的。</ p>
</ div>

展开原文

原文

If the page you are loading is loading content through Ajax onto the page, you will, obviously have different results. And, the site you mentioned does seem to load content through ajax request(s).

cURL doesn't/can't parse javascript, and hence can't load content through ajax. So, you have no way of getting the exact same content as you would get from a normal-browser.

You can verify the above said statement by comparing cURL's output and browser-with-javascript-disabled's output and finding them to be same.

duanhuoyao7011
duanhuoyao7011 非常的。 我错过了。
接近 8 年之前 回复
dsv17139
dsv17139 禁用javascript后,我仍然得到不同的输出。 stackoverflow.com/questions/13190637 / ...我还认为没有人会用ajax添加</ html> :)
接近 8 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问