浅谈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 相关文章推荐
BBS(php &amp; mysql)完整版(五)
Oct 09 PHP
PHP中foreach循环中使用引用要注意的地方
Jan 02 PHP
PHP获取数组中某元素的位置及array_keys函数应用
Jan 29 PHP
删除html标签得到纯文本可处理嵌套的标签
Apr 28 PHP
dedecms函数分享之获取某一栏目所有子栏目
May 19 PHP
理解PHP中的Session及对Session有效期的控制
Jan 08 PHP
php生成Android客户端扫描可登录的二维码
May 13 PHP
CI框架中类的自动加载问题分析
Nov 21 PHP
PHP通过引用传递参数用法分析
Dec 01 PHP
详解php几行代码实现CSV格式文件输出
Jul 01 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
Dec 24 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 23 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静态文件返回304技巧分享
2015/01/06 PHP
使用JavaScript创建新样式表和新样式规则
2016/06/14 PHP
详解PHP归并排序的实现
2016/10/18 PHP
PHP实现根据数组的值进行分组的方法
2017/04/20 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
js下弹出窗口的变通
2007/04/18 Javascript
基于jquery的direction图片渐变动画效果
2010/05/24 Javascript
让innerText在firefox火狐和IE浏览器都能用的写法
2011/05/14 Javascript
formValidator3.3的ajaxValidator一些异常分析
2011/07/12 Javascript
JavaScript实现查找字符串中第一个不重复的字符
2014/12/29 Javascript
js实现页面a向页面b传参的方法
2016/05/29 Javascript
JavaScript中匿名函数的用法及优缺点详解
2016/06/01 Javascript
浅谈jQuery 选择器和dom操作
2016/06/07 Javascript
bootstrap时间插件daterangepicker使用详解
2017/10/19 Javascript
使用Vue实现图片上传的三种方式
2018/07/17 Javascript
关于单文件组件.vue的使用
2018/09/20 Javascript
vue data恢复初始化数据的实现方法
2019/10/31 Javascript
extjs图形绘制之饼图实现方法分析
2020/03/06 Javascript
详解JSON.stringify()的5个秘密特性
2020/05/26 Javascript
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
python Pygame的具体使用讲解
2017/11/03 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
对python实现二维函数高次拟合的示例详解
2018/12/29 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
2020/02/09 Python
Python 读取WAV音频文件 画频谱的实例
2020/03/14 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
2020/05/25 Python
详解python内置模块urllib
2020/09/09 Python
.NET初级开发工程师面试题
2014/04/18 面试题
银行实习生自我鉴定范文
2013/09/19 职场文书
英语道歉信范文
2014/01/09 职场文书
个人自荐材料
2014/05/23 职场文书
党校学习心得体会范文
2014/09/09 职场文书
公安领导班子四风问题个人整改措施思想汇报
2014/10/09 职场文书
2015年评职称工作总结范文
2015/04/20 职场文书