浅谈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 相关文章推荐
dede3.1分页文字采集过滤规则详说(图文教程)
Apr 03 PHP
Apache+php+mysql在windows下的安装与配置图解(最新版)
Nov 30 PHP
php下几个常用的去空、分组、调试数组函数
Feb 22 PHP
php pack与unpack 摸板字符字符含义
Oct 29 PHP
PHP生成excel时单元格内换行问题的解决方法
Aug 26 PHP
PHP类继承 extends使用介绍
Jan 14 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
Nov 21 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
Feb 20 PHP
PHP保留两位小数的几种方法
Jul 24 PHP
解决laravel5中auth用户登录其他页面获取不到登录信息的问题
Oct 08 PHP
通过实例解析PHP数据类型转换方法
Jul 11 PHP
Laravel中获取IP的真实地理位置
Apr 01 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图片上传类带图片显示
2006/11/25 PHP
php计算整个mysql数据库大小的方法
2015/06/19 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
PHP 中魔术常量的实例详解
2017/10/26 PHP
django中的ajax组件教程详解
2018/10/18 PHP
Laravel 中创建 Zip 压缩文件并提供下载的实现方法
2019/04/02 PHP
javascript面向对象之Javascript 继承
2010/05/04 Javascript
JavaScript将相对地址转换为绝对地址示例代码
2013/07/19 Javascript
jQuery function的正确书写方法
2013/08/02 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
2015/01/09 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
2015/11/25 Javascript
在Html中使用Requirejs进行模块化开发实例详解
2016/04/15 Javascript
javascript中获取元素标签中间的内容的实现方法
2016/10/08 Javascript
微信小程序 侧滑删除(左滑删除)
2017/05/23 Javascript
详解vue.js之绑定class和style的示例代码
2017/08/24 Javascript
Vue header组件开发详解
2018/01/26 Javascript
使用JS判断移动端手机横竖屏状态
2018/07/30 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
JavaScript实现简单动态表格
2020/12/02 Javascript
[56:35]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第二局
2016/02/27 DOTA
python 实现文件的递归拷贝实现代码
2012/08/02 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
python 将print输出的内容保存到txt文件中
2018/07/17 Python
Golang GBK转UTF-8的例子
2019/08/26 Python
Python openpyxl读取单元格字体颜色过程解析
2019/09/03 Python
Python turtle画图库&amp;&amp;画姓名实例
2020/01/19 Python
pytorch masked_fill报错的解决
2020/02/18 Python
python爬虫开发之selenium模块详细使用方法与实例全解
2020/03/09 Python
Django 解决阿里云部署同步数据库报错的问题
2020/05/14 Python
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
《大禹治水》教学反思
2014/04/27 职场文书
派出所所长先进事迹
2014/05/19 职场文书
趣味运动会策划方案
2014/06/02 职场文书
关于保护环境的建议书
2014/08/26 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
利用Python多线程实现图片下载器
2022/03/25 Python