chh/httpfetch

一个用于简单HTTP请求的库(使用Guzzle Ring)

v1.0.1 2015-05-16 10:49 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:21:27 UTC


README

Build Status Latest Stable Version

httpfetch提供了一个简单的函数fetch,以便在小型脚本中轻松快速地进行HTTP请求。

httpfetch在强大的底层HTTP抽象和异步请求能力方面严重依赖于RingPHP

使用场景

  • 作为file_get_contents的替代品,但具有异步支持,对所有HTTP功能的适当支持,轻松传递请求头,解析响应头,以及正确处理HTTPS使用的证书。
  • file_get_contents在未正确配置的情况下使用HTTPS时臭名昭著地不安全,这很难做到。另请参阅此安全的file_get_contents包装器
  • 创建简单的Web服务客户端,而不依赖于Guzzle。

安装

通过Composer

$ composer require chh/httpfetch

使用

use function chh\httpfetch\fetch;

$response = fetch("https://www.example.com");

echo stream_get_contents($response['body']);

chh\httpfetch命名空间

fetch($url, array $options = [])

对提供的URL发出HTTP请求。选项遵循RingPHP请求规范,返回的响应遵循RingPHP响应规范

默认情况下,所有请求都是异步的,如果处理程序支持,这可以通过将future选项设置为false来关闭。

httpfetch实现了一些额外的选项以方便使用

  • follow_location(默认:true):遵循返回"Location"头的响应
  • max_redirects(默认:10):要遵循的重定向数量
  • auth(默认:null):基本认证的用户/密码对,例如["user", "password"]

响应是具有以下键的类似数组的对象

  • body:(字符串,fopen资源,迭代器,GuzzleHttp\Stream\StreamInterface)如果存在,则包含响应体。可以是字符串,fopen返回的资源,生成数据块的迭代器,实现了__toString的对象,或GuzzleHttp\Stream\StreamInterface对象。
  • effective_url:(字符串)返回最终响应的URL。
  • error:(\Exception)包含在传输过程中遇到的任何错误的异常。
  • headers:(必需,数组)关联数组,每个键表示头名称。每个值包含一个字符串数组,其中每个条目都是头行。如果响应之前发生错误,则头数组可以是一个空数组。
  • reason(字符串)可选原因短语。如果原因短语与状态码关联的典型原因短语不匹配,则应提供此选项。有关HTTP原因短语与状态码映射的列表,请参阅RFC 7231。
  • status:(必需,整数)HTTP状态码。如果在收到响应之前发生错误(例如,网络错误),则状态码可能设置为null。
  • transfer_stats:(数组)如果底层处理程序提供,则提供任意传输统计信息的关联数组。
  • version:(字符串)HTTP协议版本。默认为1.1。

例如,使用http_method参数进行POST请求

$response = fetch('http://www.example.com', [
    'http_method' => 'POST',
    'body' => 'foo'
]);

var_dump($response['status']);
var_dump(stream_get_contents($response['body']));

示例:使用Promise API进行异步GET请求

fetch('http://www.example.com')->then(function ($response) {
  // Save the response stream:
  $out = fopen('/tmp/foo.txt', 'w+b');
  stream_copy_to_stream($response['body'], $out);
  fclose($out);
});

示例:使用Future API进行异步请求

$response = fetch('http://www.example.com');

// Do some other stuff

$response->wait();

echo stream_get_contents($response['body']);

示例:并行请求

$response1 = fetch('http://www.example.com');
$response2 = fetch('http://www.foo.com');

echo $response1['status'], "\n";
echo $response2['status'], "\n";

get()、post()、put()、delete()、head()、options()

常见HTTP方法的辅助方法。它们都遵循相同的签名 ($url, array $options = [])

示例

use chh\httpfetch;

// GET request
$response = httpfetch\get("https://www.example.com");

// POST request with body
$response = httpfetch\post("https://www.example.com", [
    'body' => 'foo',
]);

set_default_handler(callable $handler)

覆盖由fetch函数使用的Guzzle Ring Client处理器。处理器是遵循Ring规范的可调用对象。通过传递null将处理器重置为默认值。

示例:强制使用PHP的http://流包装器

chh\httpfetch\set_default_handler(new Guzzle\Ring\Client\StreamHandler);

fetch('http://example.com');

测试

$ make test

贡献

有关详细信息,请参阅CONTRIBUTING

安全性

如果您发现任何安全相关的问题,请通过电子邮件me@christophh.net联系,而不是使用问题跟踪器。

致谢

许可

MIT许可(MIT)。请参阅许可文件以获取更多信息。