> 백엔드 개발 > PHP 튜토리얼 > php curl 有个问题请指教

php curl 有个问题请指教

WBOY
풀어 주다: 2016-06-06 20:31:35
원래의
1063명이 탐색했습니다.

最近一直在学curl
以前也用过,但是没有很深入
现在遇到一个问题,各种搜索都搜了,无解
来问一下:
curl 可以使用cookie

我的方法是
$cookies是个绝对路径
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookies);//将cookie写入,这个没问题
curl_setopt($curl2, CURLOPT_COOKIEFILE, $cookies); //使用存好的cookie
始终不成功,不能读到存好的cookie
然后使用
curl_setopt($curl2, CURLOPT_HEADER, true);//输出头
头显示根本未使用存好的cookie
尝试了各种方法
curl_setopt($curl2, CURLOPT_COOKIEFILE, $cookies);//这句'使用存好的cookie'根本没用

请问哪里的姿势错了?

回复内容:

最近一直在学curl
以前也用过,但是没有很深入
现在遇到一个问题,各种搜索都搜了,无解
来问一下:
curl 可以使用cookie

我的方法是
$cookies是个绝对路径
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookies);//将cookie写入,这个没问题
curl_setopt($curl2, CURLOPT_COOKIEFILE, $cookies); //使用存好的cookie
始终不成功,不能读到存好的cookie
然后使用
curl_setopt($curl2, CURLOPT_HEADER, true);//输出头
头显示根本未使用存好的cookie
尝试了各种方法
curl_setopt($curl2, CURLOPT_COOKIEFILE, $cookies);//这句'使用存好的cookie'根本没用

请问哪里的姿势错了?

你可以尝试在请求之前执行一次curl,获取的cookies,存到变量中

你先搞清楚,CURLOPT_HEADER 的含义是什么,如果不加这个,你执行的结果只会有服务端返回的body体,而没有header。加了这个,那么就会将服务端返回的header头和body内容体一起输出。

所以你在这里打cookie当然不会有,你要查的是发送的头里面有没有cookie,但你却在返回的头里找。

你应该在同域名下的写一个这样的PHP:cookie.php

<code><?php var_dump($_COOKIE);
</code></code>
로그인 후 복사

在你第一次种上cookie后再用代码curl访问一下,你就知道你cookie有没有用上了。

对的,这是很多人容易犯下的一个错误,你第一次打印cookie的时候,浏览器还没有种下cookie呢【因为之前的header没有发送cookie信息】,第二次刷新的话因为你第一次已经发送了header 带有cookie信息,所以你打印cookie信息【这里的cookie值得是浏览器返回的cookie】就有了

$cookies = http_build_query($_COOKIE, null, ";");

<code>curl_setopt($curl, CURLOPT_COOKIEJAR, $cookies);//将cookie写入,这个没问题
curl_setopt($curl2, CURLOPT_COOKIEFILE, $cookies); //使用存好的cookie
curl_setopt($curl2, CURLOPT_HEADER, true);//输出头
curl_setopt($curl2, CURLOPT_COOKIEFILE, $cookies);//这句'使用存好的cookie'根本没用
</code>
로그인 후 복사

你第一个设置cookie的对象都不一样啊,$curl和$curl2

贴一个我之前采集的吧

<code> if (!is_file($cookie)) {
    touch($cookie);
 }

 $this->cookieFile = $cookie;

 ...

 CURLOPT_COOKIEJAR => $this->cookieFile,
 CURLOPT_COOKIEFILE => $this->cookieFile,
</code>
로그인 후 복사

贴一个我之前使用的cookie例子

<code><?php function get_data($url , $data = array()){
     $cookie_file = dirname(__FILE__).'/cookie.txt';
     $ch = curl_init();  
     curl_setopt($ch, CURLOPT_URL,$url);
     curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)');  
     curl_setopt($ch, CURLOPT_COOKIEJAR,  $cookie_file);
     curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, 1 );
     curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); 
     curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); 
     if($data){
        curl_setopt ( $ch, CURLOPT_POST, 1 );
        curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );   
     }

     curl_setopt($ch, CURLOPT_SSLVERSION, 3);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);// 设为TRUE把curl_exec()结果转化为字符串,而不是直接输出   
     $result = curl_exec($ch);
     $error=curl_error($ch);
     curl_close($ch); 
     return $result;
}
</code></code>
로그인 후 복사
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿