php之curl实现http与https请求的方法
2016-05-18 00:00
711 查看
这篇文章主要介绍了php之curl实现http与https请求的方法,分别讲述了PHP访问http网页与访问https网页的实例,以及相关的注意事项,需要的朋友可以参考下。
本文实例讲述了php之curl实现http与https请求的方法,分享给大家供大家参考。具体如下:
通常来说,php的curl函数组可以帮助我们把机器伪装成人的行为来抓取网站,下面来分享两个例子,一个是访问http网页,一个访问https网页,一起来看一下。
每次要使用curl的时候,总要查一堆资料。
现在将常用的几句保存下来,省的每次都去谷歌。
###常规curl请求:
###使用curl请求HTTPS:
###注意
当请求https的数据时,会要求证书,这时候,加上下面这两个参数,规避ssl的证书检查
复制代码 代码如下:
###curl https请求代码
###baidu域名解析后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请求代码
<?php /** curl 获取 https 请求 * @param String $url 请求的url * @param Array $data 要發送的數據 * @param Array $header 请求时发送的header * @param int $timeout 超时时间,默认30s * @param bool $debug 是否打印错误信息,默认false */ function curl_https($url, $data=array(), $header=array(), $timeout=30, $debug=false){ $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在 curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); $response = curl_exec($ch); if($error=curl_error($ch)){ die($error); } // 打印错误信息 if($debug) { echo '=====info====='."\r\n"; print_r( curl_getinfo($ch) ); echo '=====error====='."\r\n"; print_r( curl_error($ch) ); echo '=====$response====='."\r\n"; print_r( $response ); } curl_close($ch); return $response; } // 调用 $url = 'https://www.example.com/api/message.php'; $data = array('name'=>'fdipzone'); $header = array(); $response = curl_https($url, $data, $header, 5); echo $response; ?>
###baidu域名解析后https请求示例
// $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);
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- Linux实现https方式访问站点
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- HTTPS科普扫盲帖
- php7 读取php.ini[4]
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- PHP 5.3.0 安装分析心得
- apache 环境下 php 的配置注意事项