php中curl获取返回页面的cookie

 更新时间:2016年11月25日 17:23  点击:1813
php的curl可以模仿用户浏览网页并且获取网页的cookie,获取cookie还有专用的参数如CURLOPT_COOKIEJAR 用于保存 cookie 到文件了,下面一起来看几个例子吧。

curl可以获取返回页面设置的cookie, 原理跟get_headers是一样的, 在返回的头信息中将"Set-Cookie:"的内容取出来即可.

测试页面/设置cookie的页面:

test.php

 代码如下 复制代码

<?php
setcookie('test', 'sssss');
setcookie('xxx', 'www');

//获取cookie的脚本

 代码如下 复制代码

<?php

$url = 'http://localhost/test.php';

$ch = curl_init($url); //初始化
curl_setopt($ch,CURLOPT_HEADER,1); //将头文件的信息作为数据流输出
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //返回获取的输出文本流
curl_setopt($ch, CURLOPT_HEADER, 1);
$string = curl_exec($ch);
preg_match_all('/Set-Cookie:stest=(.*)/i', $string, $results);
var_dump($results);


获取cooke并保存到文件

 代码如下 复制代码

$url = "http://www.111cn.net/";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
$content = curl_exec($ch);
curl_close($ch);


curl参数介绍

CURLOPT_COOKIEJAR 用于保存 cookie 到文件
CURLOPT_COOKIEFILE 用于将保存的 cookie 文件发送出去
CURLOPT_COOKIE 用于发送 cookie 变量

所谓 在会话结束后就过期了 是因为浏览器不保存没有过期设定的 cookie 变量,所以关闭浏览器后再次请求时就没有 cookie 发送出去

curl 处理中,如果是一次做完,只需 CURLOPT_COOKIEJAR 就可以
若要分段处理则先 CURLOPT_COOKIEJAR,后 CURLOPT_COOKIEFILE
发送 cookie 文件内容的段,不要 CURLOPT_COOKIEJAR。以避免新的 cookie 变量的影响

在利用百度工具作一个小测试时提示我们需要设置静态内容缓存时间了,我自己没有服务器权限操作,只能从其它方面入手了,自己学习php的我搜索后发现可以使用header函数来实现浏览器缓存页面的时间哦,具体如下。

设置静态内容缓存时间

 代码如下 复制代码

$interval = 60 * 60 * 6; // 6 hours
header ("Last-Modified: " . gmdate ('r', $max));
header ("Expires: " . gmdate ("r", ($max + $interval)));
header ("Cache-Control: max-age=$interval");

我们把上面这段代码加到php文件开头处,下面来给大家详解说有一下这四行代码

如我的代码

 代码如下 复制代码
$interval = 60 * 60 * 6; // 6 hours
header ("Last-Modified: " . gmdate ('r', $max));
header ("Expires: " . gmdate ("r", ($max + $interval)));
header ("Cache-Control: max-age=$interval");
$aid = intval( isset( $_POST['aid'] )?$_POST['aid']:0 );
if( ! $aid )
{
 echo '未定义广告';
}
else if( $aid ==1 )
{
 echo '加载广告内容';
}


第一行:$interval  告诉你设置6个小时了,这里大家可自定哦。
第二行:向客户端浏览器发送一个Last-Modified请求,这个会根据gmdate的参数r来调用对应的日期。
第三行:设置Expires过期时间了
第四行:设置Cache-Control 的 max-age=$interval日期了。

再测试结果为优秀了

 

php 设置静态内容缓存时间
用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL。方便开发者给用户下发欢迎消息或者做帐号的解绑

下面是一个微信公众平台关注和取消关注的实例:

 代码如下 复制代码

define("TOKEN", "w3note");//定义识别码
$wechatObj = new wechatCallbackapiTest();//实例化wechatCallbackapiTest类

if(!isset($_GET["echostr"])){
     $wechatObj->responseMsg();
}else{
 $wechatObj->valid();
}
class wechatCallbackapiTest
{
 public function valid()
    {
        $echoStr = $_GET["echostr"];
      
        if($this->checkSignature()){
         echo $echoStr;
         exit;
        }
    }
    public function responseMsg()//执行接收器方法
    {

  $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

  if (!empty($postStr)){
              
               $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
      $RX_TYPE = trim($postObj->MsgType);
      switch($RX_TYPE){
       case "event":
       $result = $this->receiveEvent($postObj);
       breadk;
      }
      echo $result;
  }else{
   echo "";
   exit;
  }
 }
  private function receiveEvent($object){
   $content = "";
   switch ($postObj->Event){
    case "subscribe":
    $content = "欢迎关注网志博客";//这里是向关注者发送的提示信息
    break;
    case "unsubscribe":
    $content = "";
    break;
   }
   $result = $this->transmitText($object,$content);
   return $result;
 
    }
 private function transmitText($object,$content){
   $textTpl = "<xml>
       <ToUserName><![CDATA[%s]]></ToUserName>
       <FromUserName><![CDATA[%s]]></FromUserName>
       <CreateTime>%s</CreateTime>
       <MsgType><![CDATA[text]]></MsgType>
       <Content><![CDATA[%s]]></Content>
       <FuncFlag>0</FuncFlag>
       </xml>";
    $result = sprintf($textTpl, $object->FromUserName, $object->$ToUserName, time(), $content);
    return $result;
 
  }
 private function checkSignature()
 {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
        
  $token = TOKEN;
  $tmpArr = array($token, $timestamp, $nonce);
  sort($tmpArr, SORT_STRING);
  $tmpStr = implode( $tmpArr );
  $tmpStr = sha1( $tmpStr );
 
  if( $tmpStr == $signature ){
   return true;
  }else{
   return false;
  }
 }
}

代码相关参数说明:

参数 描述
ToUserName 开发者微信号
FromUserName  发送方帐号(一个OpenID)
CreateTime  消息创建时间 (整型)
MsgType  消息类型,event
Event  事件类型,subscribe(订阅)、unsubscribe(取消订阅)

下面本文章来给大家介绍php打印输出棋盘的2种方法,有兴趣的朋友不防进入参考一下哦。

例子1

 代码如下 复制代码

<?php
/**
 * 隔行隔列换色
 * string fun_table(int $rows=9,int $cols=9)
 * $rows 表示行数 必须为整数 并且必须在1-20之间
 * $cols 表示列数 必须为整数 并且必须在1-20之间
 */
function fun_table($rows=9,$cols=9){
 if ($rows<1 || $rows>20){
  return "必须为整数 并且必须在1-20之间";
 }
 if ($cols<1 || $cols>20){
  return "必须为整数 并且必须在1-20之间";
 }
 if($rows!=(int)($rows)){
  return '行数 必须为整数';
 }

 if($cols!=(int)($cols)){
  return '列数 必须为整数';
 }
 $str="";
 $str.= "<table  cellspacing='0' width='500px' border = '1px' bordercolor='black'>";
 for ($i=1;$i<=$rows;$i++){
  $str.=  "<tr>";
   for ($j=1;$j<=$cols;$j++){ 
    if(($i+$j)%2){
     $str.=  "<td height='50px' bgcolor='black'>";
    }else{
     $str.=  "<td></td>";
   }
  }
 $str.=  "</tr>";
}
$str.=  "</table>";
return $str;
}
echo fun_table();
?>

例子2 简单实现棋盘-for循环

实现这个棋盘首先我们想想棋盘是怎么样的,是有很多个方格组成,然后由黑色和白色的相间的方格组成。首先我们先把方格画出来。

 

 代码如下 复制代码
<?php
echo "<table  cellspacing='0' width='500px' border = '1px' bordercolor='black'>";
for ($i=1;$i<=10;$i++){
    echo "<tr>";
    for ($j=1;$j<=10;$j++){   
            echo "<td>54im</td>";
        }
    echo "</tr>";
}
echo "</table>";
?>

得到以下结果:(是不是有点眉目了,我们现在只要把格子上颜色就可以)


php简单实现棋盘 

看到上面棋盘后,考虑下黑白格排放位置,有个规律可以发现,横排和竖排上白色格子都是基数,黑色的都是偶数,我们可以用取余的方法来判断这个格子该显示什么颜色,基数单元格我让他显示白色,偶数单元格显示黑色,基数+偶数=偶数,所以偶数单元格(黑色)我们很好找出来了。剩余的就是基数格(白色)

 代码如下 复制代码


<?php
/**
通过for循环和html实现棋盘
**/
echo "<table  cellspacing='0' width='500px' border = '1px' bordercolor='black'>";
for ($i=1;$i<=10;$i++){
    echo "<tr>";
    for ($j=1;$j<=10;$j++){   
        if(($i+$j)%2){
            echo "<td height='50px' bgcolor='black'>";
        }else{
            echo "<td></td>";
            }
        }
    echo "</tr>";
}
echo "</table>";
?>

得到的效果是这样:

php简单实现棋盘

要对微信公众平台进行开发,首先需要成为开发者,可以到https://mp.weixin.qq.com/注册一个帐号,然后按要求填写相关信息即可。
有了公众号后,在公众平台的高级功能里选择开发模式,然后在服务器配置那里填写URL和Token两个选项,Token可以随便定义,一般是英文字母加数字,但对于URL就有一点难度了,最好有自己的主机或者虚似空间,没有的最好到新浪那里注册一个免费的空间。
 
技术方面,我最讨厌理论的东西了,我喜欢实例操作,相信很多人也是这样吧,那下面我就把我的操作过程写下来吧。
下面是我的操作记录,图也截下来了,如果上面的要求都满足了,不妨也跟着步骤操作一下。
 
1、下载微信公从平台官方的示例文件
到“http://mp.weixin.qq.com/wiki/index.php?title=接入指南”,找下载PHP求例代码,如图
微信公众平台开发入门教程
 
2、获取URL
解压上面下载的文件后得到wx_sample.php,这里我把它重命名为wx.php,然后我到我的空间根目录新建一个文件夹api,再把wx.php文件上传到目录api里,这样我就获取到了,我的URL为http://w3note.com/api/wx.php,Token我就取名为w3note吧。
 
3、修改示例文件
上一步我们已经拥有了URL和Token,在填写公众平台开发模式下的服务器配置之前,先把我们先前上传的wx.php文件下载打开,找到”define("TOKEN", "weixin");“,这里我把weixin替换成我的Token名称为w3note,然后保存,上传覆盖,如图所示
微信公众平台开发入门教程
4、填写服务器配置
在微信公众平台的开发模式的服务器配置那里填写上面获取的URL和Token信息,然后提交,成功后,会有提示,“你已成为开发者”,如图所示,
微信公众平台开发入门教程
 
到这里,我已经成为开发者了,这是开发微信公众平台的开始!可能我们还对成为开发者能做什么一无所知,下面我就做一个实验,算作”扫肓“吧。
 
打开wx.php,写一个语句,调用接收器方法,如下图红框,
微信公众平台开发入门教程
 
然后找到第49行,给$contentStr重新赋值为"hello world!",如图
微信公众平台开发入门教程
 
接下来,用微信号和微信公众号通讯。
首先我用我的手机微信扫一下下面的图,然后关注w3note这个公众号。
微信公众平台开发入门教程
为了测试方便,我就登录微信网页版(用手机也可以),https://web.weixin.qq.com/
 
我向w3note这个公众号发了一个笑脸,然后它就自动回复,如图
微信公众平台开发入门教程
 
图中输出的"hello world!",就是前面代码中$contentStr变量的值。
 
再来一张
微信公众平台开发入门教程

 

[!--infotagslink--]

相关文章

  • phpems SQL注入(cookies)分析研究

    PHPEMS(PHP Exam Management System)在线模拟考试系统基于PHP+Mysql开发,主要用于搭建模拟考试平台,支持多种题型和展现方式,是国内首款支持题冒题和自动评分与教师评分相...2016-11-25
  • PHP成员变量获取对比(类成员变量)

    下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
  • php 获取用户IP与IE信息程序

    php 获取用户IP与IE信息程序 function onlineip() { global $_SERVER; if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP');...2016-11-25
  • php获取一个文件夹的mtime的程序

    php获取一个文件夹的mtime的程序了,这个就是时间问题了,对于这个问题我们来看小编整理的几个例子,具体的操作例子如下所示。 php很容易获取到一个文件夹的mtime,可以...2016-11-25
  • mybatis-plus 返回部分字段的解决方式

    这篇文章主要介绍了mybatis-plus 返回部分字段的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-02
  • 如何获取网站icon有哪些可行的方法

    获取网站icon,常用最简单的方法就是通过website/favicon.ico来获取,不过由于很多网站都是在页面里面设置favicon,所以此方法很多情况都不可用。 更好的办法是通过google提供的服务来实现:http://www.google.com/s2/favi...2014-06-07
  • jquery如何获取元素的滚动条高度等实现代码

    主要功能:获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 :$(window).width(); 获取页面的文档高度 $(document).height(); 获取页面的文档宽度 :$(document).width();...2015-10-21
  • JS使用cookie实现DIV提示框只显示一次的方法

    本文实例讲述了JS使用cookie实现DIV提示框只显示一次的方法。分享给大家供大家参考,具体如下:这里运用JavaScript的cookie技术,控制网页上的提示DIV只显示一次,也就是当用户是第一次打开网页的时候才显示,第二次自动隐藏起...2015-11-08
  • jquery获取div距离窗口和父级dv的距离示例

    jquery中jquery.offset().top / left用于获取div距离窗口的距离,jquery.position().top / left 用于获取距离父级div的距离(必须是绝对定位的div)。 (1)先介绍jquery.offset().top / left css: 复制代码 代码如下: *{ mar...2013-10-13
  • Jquery 获取指定标签的对象及属性的设置与移除

    1、先讲讲JQuery的概念,JQuery首先是由一个 America 的叫什么 John Resig的人创建的,后来又很多的JS高手也加入了这个团队。其实 JQuery是一个JavaScript的类库,这个类库集合了很多功能方法,利用类库你可以用简单的一些代...2014-05-31
  • SQLMAP结合Meterpreter实现注入渗透返回shell

    sqlmap 是一个自动SQL 射入工具。它是可胜任执行一个广泛的数据库管理系统后端指印, 检索遥远的DBMS 数据库等,下面我们来看一个学习例子。 自己搭建一个PHP+MYSQ...2016-11-25
  • PHP中SSO Cookie登录分析和实现

    什么是SSO?单点登录SSO(Single Sign-On)是身份管理中的一部分。SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护...2015-11-08
  • C#获取字符串后几位数的方法

    这篇文章主要介绍了C#获取字符串后几位数的方法,实例分析了C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • jquery获取tagName再进行判断

    如果是为了取到tagName后再进行判断,那直接用下面的代码会更方便: $(element).is('input') 如果是要取到标签用作到别的地方,可以使用一下代码: $(element)[0].tagName 或: $(element).get(0).tagName...2014-05-31
  • DOM XPATH获取img src值的query

    复制代码 代码如下:$nodes = @$xpath->query("//*[@id='main_pr']/img/@src");$prurl = $nodes->item(0)->nodeValue;...2013-10-04
  • PHP中SSO Cookie登录分析和实现

    什么是SSO?单点登录SSO(Single Sign-On)是身份管理中的一部分。SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护...2015-11-08
  • PHP 如何获取二维数组中某个key的集合

    本文为代码分享,也是在工作中看到一些“大牛”的代码,做做分享。 具体是这样的,如下一个二维数组,是从库中读取出来的。 代码清单: 复制代码 代码如下: $user = array( 0 => array( 'id' => 1, 'name' => '张三', 'ema...2014-06-07
  • vue项目中js-cookie的使用存储token操作

    这篇文章主要介绍了vue项目中js-cookie的使用存储token操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-14
  • php获取汉字拼音首字母的方法

    现实中我们经常看到这样的说明,排名不分先后,按姓名首字母进行排序。这是中国人大多数使用的排序方法。那么在php程序中该如何操作呢?下面就分享一下在php程序中获取汉字拼音的首字母的方法,在网上搜到的大多数是有问题的...2015-10-23
  • 使用C#获取系统特殊文件夹路径的解决方法

    本篇文章是对使用C#获取系统特殊文件夹路径的解决方法进行了详细的分析介绍,需要的朋友参考下...2020-06-25