PHP支持CURL库,利用URL语法规定来传输文件和数据的工具,支持很多协议,包括HTTP、FTP、TELNET等.

优点:是可以通过灵活的选项设置不同的HTTP协议参数,并且支持HTTPS.CURL可以根据URL前缀是'HTTP'还是'HTTPS'自动选择是否加密发送内容.还可以解决跨域问题等.

PHP建立CURL请求的基本步骤:

1:初始化
curl_init()
2:设置curl选项
curl_setopt()
3:执行并获取结果
curl_exec()
4:关闭释放资源
curl_close()

curl抓取百度网站示例demo:

  <?php
//初始化curl资源
$ch = curl_init(); //设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com/");
//设置头文件的信息作为数据流输出
curl_setopt($ch, CURLOPT_HEADER, 1); //执行命令,并获取结果
curl_exec($ch); //关闭curl资源,释放系统资源
curl_close($ch);

项目中比较常用到的是对回调数据接口处理.封装的方法支持post和get请求方法.数据传输包含urldecode和json.

 <?php
class HttpClient
{
/*
*get请求 urldecode数据传输(支持http和https)
*@param $url接口地址 string
*@param $headers请求报文头body数据 array
*@return type
* */
public static function get($url, $headers = array())
{
$ch = curl_init(); //初始化
if (strpos($url, 'https') === 0)
{
//当请求https的数据时,会要求证书,这时候,加上下面这两个参数,规避ssl的证书检查
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //https请求 不验证证书和hosts
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
}
if (!empty($headers))
{
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //设置http头部
}
curl_setopt($ch, CURLOPT_URL, $url); //设置获取的url地址
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //设置获取的信息以文件流的形式返回
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3); //连接超时(秒)
curl_setopt($ch, CURLOPT_TIMEOUT, 4); //执行超时(秒) $outPut = curl_exec($ch); //执行命令,并获取结果
curl_close($ch); //关闭curl资源,释放系统资源 return $outPut;
} /*
*post请求 urldecode数据传输(支持http和https)
*@param $url接口地址 string
*@param $data接口参数 array
*@param $headers请求报文头body数据 array
*@return type
* */
public static function post($url, array $data, $headers = array())
{
$ch = curl_init(); //初始化
if (strpos($url, 'https') === 0) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
}
if (!empty($headers))
{
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //设置http头部
} curl_setopt($ch, CURLOPT_URL, $url); //设置获取的url地址
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //设置获取的信息以文件流的形式返回
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3); //连接超时(秒)
curl_setopt($ch, CURLOPT_TIMEOUT, 4); //执行超时(秒)
curl_setopt($ch, CURLOPT_POST, 1); //设置post方式提交
//注意: 传递一个URL-encoded字符串,数据会被编码成 application/x-www-form-urlencoded,传递一个数组到CURLOPT_POSTFIELDS,curl会把数据编码成 multipart/form-data
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); $outPut = curl_exec($ch); //执行命令,并获取结果
curl_close($ch); //关闭curl资源,释放系统资源 return $outPut;
} /*
*post请求 json数据传输(支持http和https)
*@param $url接口地址 string
*@param $data接口参数 array或json_encode过的数据
*@return type
* */
public static function postJson($url, $data)
{
if (is_array($data)) {
$data = json_encode($data);
} $ch = curl_init();
if (strpos($url, 'https') === 0) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
} curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json; charset=utf-8',
'Content-Length: ' . strlen($data)
)
);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $outPut = curl_exec($ch);
curl_close($ch); return $outPut;
}
}

请求get和post方法实例:

 //GET请求方法
$params = [
'id' => 1,
'token' => '****'
];
$query = http_build_query($params);
$url = 'http://url地址' . '?' . $query;
$res = HttpClient::get($url);
$data = json_decode($res, true); //POST请求方法
$params = [
'id' => 1,
'token' => '****'
];
$url = 'http://url地址';
$res = HttpClient::post($url, $params);
$data = json_decode($res, true);

php使用curl实现get和post请求的方法,数据传输urldecode和json的更多相关文章

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

    原文地址:http://m.jb51.net/show/56492   这篇文章主要介绍了php之curl实现http与https请求的方法,分别讲述了PHP访问http网页与访问https网页的实例 ...

  2. PHP中使用cURL实现Get和Post请求的方法

    1.cURL介绍  cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 cURL 库.本文将介绍 cURL 的一些高级特 ...

  3. php使用cURL实现Get和Post请求的方法

    1.cURL介绍 cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 cURL 库.本文将介绍 cURL 的一些高级特性 ...

  4. 在PHP中使用CURL实现GET和POST请求的方法

    1.CURL介绍 CURL是一个利用URL语法规定来传输文件和数据的工具.支持很多协议,如HTTP.FTP.TELNET等. 幸运的是PHP也支持CURL库.本文将介绍curl的一些高级特性,以及在P ...

  5. PHP中使用CURL实现GET和POST请求

    转自:http://www.smsyun.com/home-index-page-id-284.html 一.什么是CURL? cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议, ...

  6. PHP中使用CURL实现GET和POST请求数据

    PHP中使用CURL实现GET和POST请求 一.什么是CURL? cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 ...

  7. PHP通过curl向其它服务器发请求并返回数据

    在很多时候,我们都需要请求第三方的服务器来获取一些数据,比如token,比如百度的主动推送,那么我们的php如何实现向第三方服务器发请求呢?我们可以通过curl来实现 首先定义请求的url,然后创建h ...

  8. curl如何发起DELETE/PUT请求

    curl如何发起DELETE/PUT请求 DELETE: curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE'); PUT: curl_setopt($ch ...

  9. Linux curl 命令模拟 POST/GET 请求

    Linux curl 命令模拟 POST/GET 请求   本文链接:https://blog.csdn.net/sunboy_2050/article/details/82156402 curl 命 ...

随机推荐

  1. stl vector创建二维数组

    vector<vector<); for (auto it = v.begin(); it != v.end(); it++) { ; (*it).reserve();//预留空间为5,但 ...

  2. Decision Tree Algorithm

    Decision Tree算法的思路是,将原始问题不断递归地细分为子问题,直到子问题直接可获得答案为止.在模型训练的过程中,根据训练集去做树的生长(Grow the tree),生长所有可能的Bran ...

  3. [Python3 填坑] 015 __str__ 与 __repr__ 的区别

    目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 上例子 2.2 关系与区别 Python 3.7.3 的官方文档 网上看到一个例子,运行了一下 简单地说 1. print( 坑的信息 ...

  4. [Python3 填坑] 014 类的常用魔术方法举例

    目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 __init__() 2.2 __new__() 2.3 __call__() 2.4 __str__() 2.5 __repr__() ...

  5. JavaWeb学习——session总结

    一.session简介 sesion也就是会话,Session对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整 ...

  6. 在没有iis的情况下,webApi自托管(转自momo314)

    第一步 新建一个控制台应用程序 并添加WebApi相关引用,注意,添加之后会默认帮你添加 System.Web.Http.WebHost 的引用,不过,折并没有什么鸟用,干掉他,然后手动添加引用 Sy ...

  7. P1021 邮票面值设计(dfs+背包dp)

    P1021 邮票面值设计 题目传送门 题意: 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15N+K≤15)种邮票的情况下 (假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大 ...

  8. Hangfire(任务调度)

    官网:hangfire.io 简单用法: 1.放入job BackgroundJob.Enqueue<IIMService>(c => c.SendBatchSmsByIm(read ...

  9. 如何处理HTML5新标签的浏览器兼容性问题?

    ① IE8/IE7/IE6支持通过document.createElement方法产生的标签,可以利用这一特性让这些浏览器支持HTML5新标签 ② 也可以使用成熟的框架 ex:html5shim &l ...

  10. Mac版Navicat Premium激活教程

    工具: Navicat Premium12.0.20 安装包 下载注册机工具包 链接:https://pan.baidu.com/s/1NS8gk780ds1Xn-zHrSIzIw  密码:dvke ...