浅谈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 相关文章推荐
php 冒泡排序 交换排序法
May 10 PHP
php二维数组排序方法(array_multisort usort)
Dec 25 PHP
zf框架的registry(注册表)使用示例
Mar 13 PHP
C#使用PHP服务端的Web Service通信实例
Apr 08 PHP
PHP入门之常量简介和系统常量
May 12 PHP
ThinkPHP整合百度Ueditor图文教程
Oct 21 PHP
PHP实现一维数组转二维数组的方法
Feb 25 PHP
php版微信js-sdk支付接口类用法示例
Oct 12 PHP
Laravel配置全局公共函数的方法步骤
May 09 PHP
PHP开发api接口安全验证操作实例详解
Mar 26 PHP
PHP中类与对象功能、用法实例解读
Mar 27 PHP
浅谈如何提高PHP代码质量之单元测试
May 28 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 静态页面中显示动态内容
2009/08/14 PHP
php中ob函数缓冲机制深入理解
2015/08/03 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
2016/04/02 PHP
php实现socket推送技术的示例
2017/12/20 PHP
PHP中Static(静态)关键字功能与用法实例分析
2019/04/05 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
2019/10/15 PHP
JavaScript prototype属性使用说明
2010/05/13 Javascript
ajax中get和post的说明及使用与区别
2012/12/23 Javascript
如何改进javascript代码的性能
2015/04/02 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
2016/05/25 Javascript
js 动态给元素添加、移除事件的实现方法
2016/07/19 Javascript
AngularJS 自定义指令详解及示例代码
2016/08/17 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
2016/12/07 Javascript
浅析vue数据绑定
2017/01/17 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
用angular实现多选按钮的全选与反选实例代码
2017/05/23 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
修改 bootstrap table 默认detailRow样式的实例代码
2017/07/21 Javascript
jQuery实现动态生成年月日级联下拉列表示例
2019/05/11 jQuery
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
Vue如何获取数据列表展示
2019/12/11 Javascript
Python 匹配任意字符(包括换行符)的正则表达式写法
2009/10/29 Python
跟老齐学Python之编写类之一创建实例
2014/10/11 Python
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
Python实现Kmeans聚类算法
2020/06/10 Python
使用python进行拆分大文件的方法
2018/12/10 Python
解决新django中的path不能使用正则表达式的问题
2018/12/18 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
2019/06/14 Python
对django views中 request, response的常用操作详解
2019/07/17 Python
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
STRATHBERRY苏贝瑞包包官网:西班牙高级工匠手工打造
2020/11/10 全球购物
函授本科毕业生自我鉴定
2013/10/16 职场文书
县政府领导班子四风问题对照检查材料思想汇报
2014/09/26 职场文书
公司出纳岗位职责
2015/03/31 职场文书
黑白记忆观后感
2015/06/18 职场文书
学校学习型党组织建设心得体会
2019/06/21 职场文书