chh / httpfetch
一个用于简单HTTP请求的库(使用Guzzle Ring)
v1.0.1
2015-05-16 10:49 UTC
Requires
- php: >=5.4.0
- guzzlehttp/ringphp: ~1.0
Requires (Dev)
- phpunit/phpunit: 4.*
This package is not auto-updated.
Last update: 2024-09-14 17:21:27 UTC
README
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)。请参阅许可文件以获取更多信息。