资讯专栏INFORMATION COLUMN

php之curl实现http与https请求的方法

loonggg / 1645人阅读

这篇文章主要介绍了php之curl实现http与https请求的方法,分别讲述了PHP访问http网页与访问https网页的实例,以及相关的注意事项,需要的朋友可以参考下。

本文实例讲述了php之curl实现http与https请求的方法,分享给大家供大家参考。具体如下:
通常来说,php的curl函数组可以帮助我们把机器伪装成人的行为来抓取网站,下面来分享两个例子,一个是访问http网页,一个访问https网页,一起来看一下。
每次要使用curl的时候,总要查一堆资料。
现在将常用的几句保存下来,省的每次都去谷歌。

常规curl请求:
$url = "http://www.jb51.net";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
curl_close($curl);
var_dump($data);
使用curl请求HTTPS:
$url = "https://www.jb51.net";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

// 设置头信息(当用IP直接访问时,加这个如:https://baibu.com -> 220.15.23.5)
// curl_setopt($ci, CURLOPT_HTTPHEADER, array("Host:baibu.com"));

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //这个是重点,规避ssl的证书检查。
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 跳过host验证
$data = curl_exec($curl);
curl_close($curl);
var_dump($data);
注意

当请求https的数据时,会要求证书,这时候,加上下面这两个参数,规避ssl的证书检查
复制代码 代码如下:

// https请求 不验证证书和hosts
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 

// 从证书中检查SSL加密算法是否存在(默认不需要验证)
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl https请求代码
"fdipzone");
$header = array();

$response = curl_https($url, $data, $header, 5);

echo $response;
?>
baidu域名解析后https请求示例

为什么要解析域名后再请求呢?因为用curl请求网络,如果直接用域名baidu.com 这样会在请求中解析域名耗时很长,测试了几次有10几秒吧,如果直接用解析后的IP请求,则速度会大大提升。

请看下面的示例:

// $url = "https://www.baidu.com";
$url =  "https://123.125.114.144";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

// 增加请求头文件
 curl_setopt($ch, CURLOPT_HTTPHEADER, array("Host:baidu.com"));
 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//这个是重点。
 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

 $data = curl_exec($curl);
 // 打印获取curl请求信息
 // $curl_info = curl_getinfo( $curl );
 // print_r($curl_info);
 // 打印错误信息
 // curl_error( $curl);
 curl_close($curl);
 var_dump($data);
更加完美的封装:

加载证书文件:

/** 
 * curl POST 
 * 
 * @param   string  url 
 * @param   array   数据 
 * @param   int     请求超时时间 
 * @param   bool    HTTPS时是否进行严格认证 
 * @return  string 
 */  
function curlPost($url, $data = array(), $timeout = 30, $CA = true){    
  
    $cacert = getcwd() . "/cacert.pem"; //CA根证书  
    $SSL = substr($url, 0, 8) == "https://" ? true : false;  
      
    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL, $url);  
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);  
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout-2);  
    if ($SSL && $CA) {  
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);   // 只信任CA颁布的证书  
        curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根证书(用来验证的网站证书是否是CA颁布)  
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名,并且是否与提供的主机名匹配  
    } else if ($SSL && !$CA) {  
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书  
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 检查证书中是否设置域名  
    }  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Expect:")); //避免data数据过长问题  
    curl_setopt($ch, CURLOPT_POST, true);  
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);  
    //curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); //data with URLEncode  
  
    $ret = curl_exec($ch);  
    //var_dump(curl_error($ch));  //查看报错信息  
  
    curl_close($ch);  
    return $ret;    
}    

相关文章地址:详解使用PHP CURL访问HTTPS

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21731.html

相关文章

  • PHP回顾IO

    摘要:命令行时返回值为,标准输入输出均指向终端可用进程号查看。会在脚本执行完毕后关闭三个流,无需用户手动关闭。与远程网址交互是一个请求和响应的过程,其中细节可参考本人之前的文章回顾之请求和回顾之响应,也可参考协议的权威文档。 转载请注明文章出处: https://tlanyan.me/php-review... PHP回顾系列目录 PHP基础 web请求 cookie web响应 ses...

    happen 评论0 收藏0
  • 如何通过curl完成一些功能

    摘要:例如模拟表单向某个地址发送数据在无验证码的情况下模拟表单完成用户登陆上传某个文件到远程服务器请求远程服务器提供的某些功能支持和协议。我们在使用过程当中,如果没有基础根本不知道如何开发微信公众号。 微信微博公众号、QQ公众号、地图和很多的第三方功能提供都是采用http 的API(应用程序)形式向开发人员提供的功能。 如果你只希望能够做些简单的微信公众号、QQ公众号等小应用,深入学习PHP...

    Java_oldboy 评论0 收藏0
  • PHP cURL

    摘要:支持创建的库,能够连接通讯各种服务器使用各种协议。目前支持的协议有。在一些复杂的请求中,不能够设置请求头代理认证等相关信息,更不能向某个服务器提交表单数据,上传文件。文件类型可在文件名后以的格式指定。 概述 简介 在设计之初,cURL (Client URL Library)是一种作为使用 URL 语法传输数据的命令行工具。通过 cURL 库,我们可以在 PHP 脚本中自由地使用某种协...

    happen 评论0 收藏0
  • PHP cURL请求详解

    摘要:不支持多进程,如果需要异步请求,非阻塞的方式,请选择。时会发送请求,类型为,是表单提交时最常见的一种。允许函数执行的最长秒数。设定请求中部分的内容。常规的使用来请求,功能强大,使用方便,按需配置。 在PHP后端的开发过程中,除了获取数据库的数据和处理数据的内部逻辑,往往还需要请求其他服务器接口的数据,我们一般有3种方式来获取数据,分别是: file_get_contents fsoc...

    paney129 评论0 收藏0
  • PHP中使用CURL,“撩”服务器只需几行——php curl详细解析和常见大坑

    摘要:七夕啦,作为开发,妹子没得撩就撩下服务器吧,妹子有得撩的同学那就左拥妹子右抱服务器吧,况且妹子是要礼物的,服务器又不用。下面我们来看一些常用的情景,我们需要如何打扮自己配置参数才能正确撩妹正确撩到服务器。 七夕啦,作为开发,妹子没得撩就撩下服务器吧,妹子有得撩的同学那就左拥妹子右抱服务器吧,况且妹子是要礼物的,服务器又不用。好啦,长话短说再长说,祭出今天的工具——CURL(Client...

    SexySix 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<