自由空间——xukzhao.ga

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2|回复: 0

浅谈 php 采用curl 函数库获取网页 cookie 和带着cookie去访问...

[复制链接]

22

主题

13

回帖

276

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
276
发表于 2021-5-21 16:39:40 | 显示全部楼层 |阅读模式
使用下面的函数,将会获得两种形式的 cookie,一种保存在文件中,一种直接以变量的形式返回。
经验提示: 有时候,在不同的代码运行环境中,带着文件cookie 去访问会成功,而变量却失败,有时候却相反。不过目前,这两种方法总有一种会成功
  1. function get_cookie($url_, $params_, $referer_) {

  2.     if ($url_ == null) {
  3.         echo "get_cookie_url_null";
  4.         exit;
  5.     }
  6.     if ($params_ == null) {
  7.         echo "get_params_null";
  8.         exit;
  9.     }
  10.     if ($referer_ == null) {
  11.         echo "get_referer-null";
  12.         exit;
  13.     }
  14.     $this_header = array("content-type: application/x-www-form-urlencoded; charset=UTF-8");//访问链接时要发送的头信息

  15.     $ch = curl_init($url_);//这里是初始化一个访问对话,并且传入url,这要个必须有

  16.     //curl_setopt就是设置一些选项为以后发起请求服务的

  17.     curl_setopt($ch, CURLOPT_HTTPHEADER, $this_header);//一个用来设置HTTP头字段的数组。使用如下的形式的数组进行设置: array('Content-type: text/plain', 'Content-length: 100')
  18.     curl_setopt($ch, CURLOPT_HEADER, 1);//如果你想把一个头包含在输出中,设置这个选项为一个非零值,我这里是要输出,所以为 1

  19.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//将 curl_exec()获取的信息以文件流的形式返回,而不是直接输出。设置为0是直接输出

  20.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);//设置跟踪页面的跳转,有时候你打开一个链接,在它内部又会跳到另外一个,就是这样理解

  21.     curl_setopt($ch, CURLOPT_POST, 1);//开启post数据的功能,这个是为了在访问链接的同时向网页发送数据,一般数urlencode码

  22.     curl_setopt($ch, CURLOPT_POSTFIELDS, $params_); //把你要提交的数据放这

  23.     curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');//获取的cookie 保存到指定的 文件路径,我这里是相对路径,可以是$变量

  24.     //curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');//要发送的cookie文件,注意这里是文件,还一个是变量形式发送

  25.     //curl_setopt($curl, CURLOPT_COOKIE, $this->cookies);//例如这句就是设置以变量的形式发送cookie,注意,这里的cookie变量是要先获取的,见下面获取方式

  26.     curl_setopt($ch, CURLOPT_REFERER, $referer_); //在HTTP请求中包含一个'referer'头的字符串。告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。

  27.     $content = curl_exec($ch);     //重点来了,上面的众多设置都是为了这个,进行url访问,带着上面的所有设置

  28.     if (curl_errno($ch)) {
  29.         echo 'Curl error: ' . curl_error($ch);
  30.         exit(); //这里是设置个错误信息的反馈
  31.     }

  32.     if ($content == false) {
  33.         echo "get_content_null";
  34.         exit();
  35.     }
  36.     preg_match('/Set-Cookie:(.*);/iU', $content, $str); //这里采用正则匹配来获取cookie并且保存它到变量$str里,这就是为什么上面可以发送cookie变量的原因

  37.     $cookie = $str[1]; //获得COOKIE(SESSIONID)

  38.     curl_close($ch);//关闭会话

  39.     return $cookie;//返回cookie  
  40. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|自由空间

GMT+8, 2025-7-20 19:27 , Processed in 0.709097 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表