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

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

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

  1. 1:初始化
  2. curl_init()
  3. 2:设置curl选项
  4. curl_setopt()
  5. 3:执行并获取结果
  6. curl_exec()
  7. 4:关闭释放资源
  8. 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. //POST请求方法
  12. $params = [
  13. 'id' => 1,
  14. 'token' => '****'
  15. ];
  16. $url = 'http://url地址';
  17. $res = HttpClient::post($url, $params);
  18. $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. pygame应用——生产者消费者模型

    因为操作系统的一个生产者-消费者拓展作业,以一个飞机大战的模型修改来的 import pygame import time from pygame.locals import * bulletsNum ...

  2. 【ABAP系列】SAP ABAP 工单增强

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 工单增强   ...

  3. 网络流强化-HDU4280

    数组没开够居然显示TLE而不是RE,自己觉得好的优化的方法没什么用…… //http://www.renfei.org/blog/isap.html 带解释的 //https://www.cnblog ...

  4. 逻辑回归提高阈值对p和r的影响

    这里我做了一个实验 也就是随着阈值的增大,precision增加或者不变,recall减少或者不变.

  5. RTSP取流设备密码含@

    一.rtsp取流格式简介 RTSP的基本取流格式为:rtsp://username:password@ip_addr/... 如海康的ip地址为:rtsp://admin:admin123@10.1. ...

  6. MySQL-第三篇SQL语句基础(2)数据库约束

    1.数据库约束. 约束是在表上强制执行的数据校验规则,约束主要用于保证数据库里数据的完整性. MySQL使用information_schema数据库里的TABLE_CONSTRAINTS表来保存该数 ...

  7. 11、numpy——字符串函数

    NumPy 字符串函数 以下函数用于对 dtype 为 numpy.string_ 或 numpy.unicode_ 的数组执行向量化字符串操作. 它们基于 Python 内置库中的标准字符串函数. ...

  8. shuoj 1 + 2 = 3? (二分+数位dp)

    题目传送门 1 + 2 = 3? 发布时间: 2018年4月15日 22:46   最后更新: 2018年4月15日 23:25   时间限制: 1000ms   内存限制: 128M 描述 埃森哲是 ...

  9. 【学习总结】Python-3-字符串函数split()的妙用

    参考: 菜鸟教程-Python3-Python字符串-split() 语法: str.split(str="", num=string.count(str)) 参数 str -- ...

  10. 20191101php日期练习

    <?phpecho abs(-23);echo "<hr/>";echo date("t");echo "<hr/>&q ...