浅谈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和ACCESS写聊天室(六)
Oct 09 PHP
Windows中安装Apache2和PHP4权威指南
Nov 18 PHP
用php过滤危险html代码的函数
Jul 22 PHP
php 页面执行时间计算代码
Dec 04 PHP
PHP 日期加减的类,很不错
Oct 10 PHP
给初学者的30条PHP最佳实践(荒野无灯)
Aug 02 PHP
php中mysql模块部分功能的简单封装
Sep 30 PHP
Linux fgetcsv取得的数组元素为空字符串的解决方法
Nov 25 PHP
PHP对象Object的概念 介绍
Jun 14 PHP
基于PHP导出Excel的小经验 完美解决乱码问题
Jun 10 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
Jun 27 PHP
Laravel框架源码解析之入口文件原理分析
May 14 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
介绍几个array库的新函数 php
2006/12/29 PHP
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
php中全局变量global的使用演示代码
2011/05/18 PHP
如何在smarty中增加类似foreach的功能自动加载数据
2013/06/26 PHP
php文件夹与文件目录操作函数介绍
2013/09/09 PHP
Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
2016/03/05 PHP
PHP中explode函数和split函数的区别小结
2016/08/24 PHP
PhpSpreadsheet设置单元格常用操作汇总
2020/11/13 PHP
JavaScript 捕获窗口关闭事件
2009/07/26 Javascript
网页禁用右键实现代码(JavaScript代码)
2009/10/29 Javascript
用javascript获取当页面上鼠标光标位置和触发事件的对象的代码
2009/12/09 Javascript
js中直接声明一个对象的方法
2014/08/10 Javascript
JavaScript严格模式禁用With语句的原因
2014/10/20 Javascript
JavaScript中操作字符串之localeCompare()方法的使用
2015/06/06 Javascript
jQuery实现按钮点击遮罩加载及处理完后恢复的效果
2016/06/07 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
2017/08/31 Javascript
AngularJS中table表格基本操作示例
2017/10/10 Javascript
使用 vue.js 构建大型单页应用
2018/02/10 Javascript
JS删除String里某个字符的方法
2021/01/06 Javascript
深入浅析vue全局环境变量和模式
2020/04/28 Javascript
微信小程序清空输入框信息与实现屏幕往上滚动的示例代码
2020/06/23 Javascript
javascript读取本地文件和目录方法详解
2020/08/06 Javascript
[44:47]Ti4 循环赛第三日 iG vs NaVi
2014/07/12 DOTA
Python2中的raw_input() 与 input()
2015/06/12 Python
Python操作MySQL数据库9个实用实例
2015/12/11 Python
Python探索之URL Dispatcher实例详解
2017/10/28 Python
Python文件监听工具pyinotify与watchdog实例
2018/10/15 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
使用Python画了一棵圣诞树的实例代码
2020/11/27 Python
美国创意之家:BulbHead
2017/07/12 全球购物
校园文化艺术节宣传标语
2014/10/09 职场文书
邀请书格式范文
2015/02/02 职场文书
网络研修随笔感言
2015/11/18 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书
初中教务主任竞聘演讲稿(范文)
2019/08/20 职场文书