使用下面的函数,将会获得两种形式的 cookie,一种保存在文件中,一种直接以变量的形式返回。 经验提示: 有时候,在不同的代码运行环境中,带着文件cookie 去访问会成功,而变量却失败,有时候却相反。不过目前,这两种方法总有一种会成功 - function get_cookie($url_, $params_, $referer_) {
- if ($url_ == null) {
- echo "get_cookie_url_null";
- exit;
- }
- if ($params_ == null) {
- echo "get_params_null";
- exit;
- }
- if ($referer_ == null) {
- echo "get_referer-null";
- exit;
- }
- $this_header = array("content-type: application/x-www-form-urlencoded; charset=UTF-8");//访问链接时要发送的头信息
- $ch = curl_init($url_);//这里是初始化一个访问对话,并且传入url,这要个必须有
- //curl_setopt就是设置一些选项为以后发起请求服务的
- curl_setopt($ch, CURLOPT_HTTPHEADER, $this_header);//一个用来设置HTTP头字段的数组。使用如下的形式的数组进行设置: array('Content-type: text/plain', 'Content-length: 100')
- curl_setopt($ch, CURLOPT_HEADER, 1);//如果你想把一个头包含在输出中,设置这个选项为一个非零值,我这里是要输出,所以为 1
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//将 curl_exec()获取的信息以文件流的形式返回,而不是直接输出。设置为0是直接输出
- curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);//设置跟踪页面的跳转,有时候你打开一个链接,在它内部又会跳到另外一个,就是这样理解
- curl_setopt($ch, CURLOPT_POST, 1);//开启post数据的功能,这个是为了在访问链接的同时向网页发送数据,一般数urlencode码
- curl_setopt($ch, CURLOPT_POSTFIELDS, $params_); //把你要提交的数据放这
- curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');//获取的cookie 保存到指定的 文件路径,我这里是相对路径,可以是$变量
- //curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');//要发送的cookie文件,注意这里是文件,还一个是变量形式发送
- //curl_setopt($curl, CURLOPT_COOKIE, $this->cookies);//例如这句就是设置以变量的形式发送cookie,注意,这里的cookie变量是要先获取的,见下面获取方式
- curl_setopt($ch, CURLOPT_REFERER, $referer_); //在HTTP请求中包含一个'referer'头的字符串。告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。
- $content = curl_exec($ch); //重点来了,上面的众多设置都是为了这个,进行url访问,带着上面的所有设置
- if (curl_errno($ch)) {
- echo 'Curl error: ' . curl_error($ch);
- exit(); //这里是设置个错误信息的反馈
- }
- if ($content == false) {
- echo "get_content_null";
- exit();
- }
- preg_match('/Set-Cookie:(.*);/iU', $content, $str); //这里采用正则匹配来获取cookie并且保存它到变量$str里,这就是为什么上面可以发送cookie变量的原因
- $cookie = $str[1]; //获得COOKIE(SESSIONID)
- curl_close($ch);//关闭会话
- return $cookie;//返回cookie
- }
复制代码
|