浅谈PHP发送HTTP请求的几种方式


Posted in PHP onJuly 25, 2017

PHP 开发中我们常用 cURL 方式封装 HTTP 请求,什么是 cURL?

cURL 是一个用来传输数据的工具,支持多种协议,如在 Linux 下用 curl 命令行可以发送各种 HTTP 请求。PHP 的 cURL 是一个底层的库,它能根据不同协议跟各种服务器通讯,HTTP 协议是其中一种。

现代化的 PHP 开发框架中经常会用到一个包,叫做 GuzzleHttp,它是一个 HTTP 客户端,也可以用来发送各种 HTTP 请求,那么它的实现原理是什么,与 cURL 有何不同呢?

Does Guzzle require cURL?

No. Guzzle can use any HTTP handler to send requests. This means that Guzzle can be used with cURL, PHP's stream wrapper, sockets, and non-blocking libraries like React. You just need to configure an HTTP handler to use a different method of sending requests.

这是 GuzzleHttp 文档 FAQ 中的一个 Question,可见 GuzzleHttp 并不依赖 cURL 库,而支持多种发送 HTTP 请求的方式。

PHP 发送 HTTP 请求的方式

那么这里整理一下除了使用 cURL 外 PHP 发送 HTTP 请求的方式。

1.cURL

详细方法:https://3water.com/article/56492.htm

2.stream流的方式

stream_context_create 作用:创建并返回一个文本数据流并应用各种选项,可用于 fopen(), file_get_contents() 等过程的超时设置、代理服务器、请求方式、头信息设置的特殊过程。

以一个 POST 请求为例:

PHP

<?php
/**
 * Created by PhpStorm.
 * User: tanteng
 * Date: 2017/7/22
 * Time: 13:48
 */
function post($url, $data)
{
  $postdata = http_build_query(
    $data
  );

  $opts = array('http' =>
           array(
             'method' => 'POST',
             'header' => 'Content-type: application/x-www-form-urlencoded',
             'content' => $postdata
           )
  );
  $context = stream_context_create($opts);
  $result = file_get_contents($url, false, $context);
  return $result;
}

关于 PHP stream 的介绍文章:https://3water.com/article/68891.htm

3.socket方式

使用套接字建立连接,拼接 HTTP 报文发送数据进行 HTTP 请求。

一个 GET 方式的例子:

PHP

<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
  echo "$errstr ($errno)<br />\n";
} else {
  $out = "GET / HTTP/1.1\r\n";
  $out .= "Host: www.example.com\r\n";
  $out .= "Connection: Close\r\n\r\n";
  fwrite($fp, $out);
  while (!feof($fp)) {
    echo fgets($fp, 128);
  }
  fclose($fp);
}
?>

本文介绍了发送 HTTP 请求的几种不同的方式。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
MYSQL数据库初学者使用指南
Nov 16 PHP
PHP setcookie() cannot modify header information 的解决方法
Jan 09 PHP
PHP执行linux系统命令的常用函数使用说明
Apr 27 PHP
php源代码安装常见错误与解决办法分享
May 28 PHP
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
Jun 22 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
Aug 19 PHP
PHP中通过fopen()函数访问远程文件示例
Nov 18 PHP
在WordPress中使用wp-cron插件来设置定时任务
Dec 10 PHP
PHP数学运算函数大汇总(经典值得收藏)
Apr 01 PHP
thinkphp整合微信支付代码分享
Nov 24 PHP
详解PHP安装mysql.so扩展的方法
Dec 31 PHP
PHP实现爬虫爬取图片代码实例
Mar 03 PHP
php 删除指定文件夹的实例讲解
Jul 25 #PHP
Laravel5.* 打印出执行的sql语句的方法
Jul 24 #PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 #PHP
PHP实现的登录页面信息提示功能示例
Jul 24 #PHP
PHP检查网站是否宕机的方法示例
Jul 24 #PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 #PHP
PHP实践教程之过滤、验证、转义与密码详解
Jul 24 #PHP
You might like
在php中取得image按钮传递的name值
2006/10/09 PHP
Yii中Model(模型)的创建及使用方法
2015/12/28 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
2018/06/04 PHP
完美解决JS中汉字显示乱码问题(已解决)
2006/12/27 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
Jquery getJSON方法详细分析
2013/12/26 Javascript
js数组循环遍历数组内所有元素的方法
2014/01/18 Javascript
不使用ajax实现无刷新提交表单
2014/12/21 Javascript
jquery实现树形菜单完整代码
2015/12/29 Javascript
JavaScript 数组的深度复制解析
2016/11/02 Javascript
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
Node.js文件编码格式的转换的方法
2018/04/27 Javascript
JavaScript轮播停留效果的实现思路
2018/05/24 Javascript
vue axios 简单封装以及思考
2018/10/09 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
2019/08/20 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
Python随机生成数据后插入到PostgreSQL
2016/07/28 Python
详解使用python的logging模块在stdout输出的两种方法
2017/05/17 Python
python 重定向获取真实url的方法
2018/05/11 Python
Django rest framework实现分页的示例
2018/05/24 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
发现两个有趣的CSS3动画效果
2013/08/14 HTML / CSS
Css3圆角边框制作代码
2015/11/18 HTML / CSS
css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
2016/12/06 HTML / CSS
canvas实现圆绘制的示例代码
2019/09/11 HTML / CSS
Canvas获取视频第一帧缩略图的实现
2020/11/11 HTML / CSS
柏林通行证:Berlin Pass
2018/04/11 全球购物
拉夫劳伦爱尔兰官方网站:Ralph Lauren爱尔兰
2020/04/10 全球购物
Swanson中国官网:美国斯旺森健康产品公司
2021/03/01 全球购物
财务会计人员岗位职责
2013/11/30 职场文书
应届本科生推荐信范文
2013/12/25 职场文书
2014年大班元旦活动方案
2014/02/26 职场文书
贷款委托书
2014/08/01 职场文书
订货会邀请函
2015/01/31 职场文书
鲁滨逊漂流记读书笔记
2015/06/26 职场文书
Win11 Build 21996.1 Dev版怎么样? win11系统截图欣赏
2021/11/21 数码科技