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:

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

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

  1 <?php
  2 class HttpClient
  3 {
  4     /*
  5      *get请求  urldecode数据传输(支持http和https)
  6      *@param   $url接口地址   string
  7      *@param   $headers请求报文头body数据  array
  8      *@return  type
  9      * */
 10     public static function get($url, $headers = array())
 11     {
 12         $ch = curl_init(); //初始化
 13         if (strpos($url, 'https') === 0)
 14         {
 15             //当请求https的数据时,会要求证书,这时候,加上下面这两个参数,规避ssl的证书检查
 16             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //https请求 不验证证书和hosts
 17             curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
 18         }
 19         if (!empty($headers))
 20         {
 21             curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //设置http头部
 22         }
 23         curl_setopt($ch, CURLOPT_URL, $url); //设置获取的url地址
 24         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //设置获取的信息以文件流的形式返回
 25         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3); //连接超时(秒)
 26         curl_setopt($ch, CURLOPT_TIMEOUT, 4); //执行超时(秒)
 27
 28         $outPut = curl_exec($ch); //执行命令,并获取结果
 29         curl_close($ch); //关闭curl资源,释放系统资源
 30
 31         return $outPut;
 32     }
 33
 34     /*
 35      *post请求  urldecode数据传输(支持http和https)
 36      *@param    $url接口地址   string
 37      *@param    $data接口参数  array
 38      *@param    $headers请求报文头body数据  array
 39      *@return   type
 40      * */
 41     public static function post($url, array $data, $headers = array())
 42     {
 43         $ch = curl_init(); //初始化
 44         if (strpos($url, 'https') === 0) {
 45             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
 46             curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
 47         }
 48         if (!empty($headers))
 49         {
 50             curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //设置http头部
 51         }
 52
 53         curl_setopt($ch, CURLOPT_URL, $url); //设置获取的url地址
 54         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //设置获取的信息以文件流的形式返回
 55         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3); //连接超时(秒)
 56         curl_setopt($ch, CURLOPT_TIMEOUT, 4); //执行超时(秒)
 57         curl_setopt($ch, CURLOPT_POST, 1); //设置post方式提交
 58         //注意: 传递一个URL-encoded字符串,数据会被编码成 application/x-www-form-urlencoded,传递一个数组到CURLOPT_POSTFIELDS,curl会把数据编码成 multipart/form-data
 59         curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
 60
 61         $outPut = curl_exec($ch); //执行命令,并获取结果
 62         curl_close($ch); //关闭curl资源,释放系统资源
 63
 64         return $outPut;
 65     }
 66
 67     /*
 68      *post请求  json数据传输(支持http和https)
 69      *@param    $url接口地址   string
 70      *@param    $data接口参数  array或json_encode过的数据
 71      *@return   type
 72      * */
 73     public static function postJson($url, $data)
 74     {
 75         if (is_array($data)) {
 76             $data = json_encode($data);
 77         }
 78
 79         $ch = curl_init();
 80         if (strpos($url, 'https') === 0) {
 81             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
 82             curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
 83         }
 84
 85         curl_setopt($ch, CURLOPT_HTTPHEADER, array(
 86             'Content-Type: application/json; charset=utf-8',
 87             'Content-Length: ' . strlen($data)
 88                 )
 89         );
 90         curl_setopt($ch, CURLOPT_URL, $url);
 91         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 92         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
 93         curl_setopt($ch, CURLOPT_TIMEOUT, 4);
 94         curl_setopt($ch, CURLOPT_POST, 1);
 95         curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
 96
 97         $outPut = curl_exec($ch);
 98         curl_close($ch);
 99
100         return $outPut;
101     }
102 }

请求get和post方法实例:

 1 //GET请求方法
 2 $params = [
 3     'id' => 1,
 4     'token' => '****'
 5 ];
 6 $query = http_build_query($params);
 7 $url = 'http://url地址' . '?' . $query;
 8 $res = HttpClient::get($url);
 9 $data = json_decode($res, true);
10
11
12 //POST请求方法
13 $params = [
14     'id' => 1,
15     'token' => '****'
16 ];
17 $url = 'http://url地址';
18 $res = HttpClient::post($url, $params);
19 $data = json_decode($res, true);

转载于:https://www.cnblogs.com/cxx8181602/p/8330819.html

php使用curl实现get和post请求的方法,数据传输urldecode和json相关推荐

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

    PHP中使用cURL实现Get和Post请求的方法,需要的朋友可以参考一下 1.cURL介绍 cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等 ...

  2. python写页面发送post请求_Python模拟浏览器向CSDN发送post请求的方法,POST

    目录 1.发送get请求的方法 import requests import json def GET(url): #get请求 req = requests.get(url) #输出状态码 prin ...

  3. curl 发送各种格式的请求

    HTTP 的 POST 请求通常是用于提交数据,可以通过这篇文章来了解各种提交方式:四种常见的 POST 提交数据方式.做 Web 后端开发时,不可避免地要自己给自己发请求来调试接口,这里要记录的内容 ...

  4. php curl无视ssl,用Curl实现Post和Get请求,可绕过SSL验证

    今天撸码用到了Curl的post和get请求并需要绕过SSL验证,现将代码打包以备后用: function request_by_curl($url, $post_data = '', $timeou ...

  5. WAMP安装curl扩展并发起https请求

    wamp安装curl扩展的方法: http://blog.csdn.net/superuser007/article/details/5781095 安装出现 PHP Extension " ...

  6. curl post json_curl 模拟 GETPOST 请求,以及 curl post 上传文件

    curl 模拟 GETPOST 请求,以及 curl post 上传文件 一般情况下,我们调试数据接口,都会使用一个 postman 的工具,但是这个工具还是有点大了.事实上,我们在调试一些小功能的时 ...

  7. curl/wget 模拟发送post请求

    curl/wget 模拟发送post请求 curl -H "这里是请求header信息" -X POST -d "这里是请求body体"  ip:port -O ...

  8. curl命令行发送POST请求

    在开发后对接口进行调试,效率往往是: 前端界面 > Postman > curl 有时候必须使用curl实现调用 请求示例 curl -X POST http://192.168.57.8 ...

  9. php中使用Curl、socket、file_get_contents三种方法POST提交数据

    抓取远程内容,之前一直都在用file_get_content函数,其实早就知道有curl这么一个好东西的存在,但是看了一眼后感觉使用颇有些复杂,没有file_get_content那么简单,再就是需求 ...

最新文章

  1. samba 安装配置
  2. 拦截锚点修改url_浅谈URL跳转与Webview安全
  3. Luogu-P3205-HNOI2010-合唱队
  4. mysql中实现over partiton by,进行分组排序取topN
  5. MySQL幻读及解决方法
  6. 临床试验中lm是什么职位_据说!这是离临床试验成功最近的职位之一
  7. html5 dzzxjbd cn,UEditor实现单张图片上传至腾讯云(对象存储服务)功能(html5
  8. 图像局部特征(四)--FAST-ER角点检测子
  9. 极路由3C【C103B】刷breed再刷老毛子教程
  10. 解除网页复制限制的Chrome插件-SuperCopy
  11. BMZCTF-MISC(一) WriteUp
  12. php日期格式带T,php日期格式
  13. 基于S52单片机的温度测量与报警装置
  14. “C++”读作「C 加加」,为什么“C♯”不能读作「C 井」呢?
  15. Landscape - 使用Landscape Gizmo复制地形
  16. 200+款神器,全网最好用的免费在线工具,都在这里了!
  17. Viper快速配置与上手
  18. MySQL InnoDB如何解决幻读?
  19. java 汇编_大话+图说:Java 汇编指令——只为让你懂
  20. PTA-莫尔斯码(字符串,模拟)

热门文章

  1. [wordpress]更新插件时,免去FTP操作
  2. Hive系列(一)metastore的认证和授权
  3. Worktile 移动团队如何使用 C++ 完成 Worktile Pro 跨平台应用开发2
  4. Java 并发(JUC 包-05)
  5. Oracle 查询练习及答案
  6. Web前端——CSS层叠样式表
  7. sysadmin默认密码_从sysadmin过渡到DevOps工程师的案例
  8. 蓬勃发展的社区将帮助您的项目成功的6种方式
  9. :继续教育学习助手_我们自己做:教育的开放组织
  10. netflix 开源_手工3D打印机,Netflix上的开源等