p3k / http
PHP curl 函数的简单封装 API
0.1.12
2021-10-12 14:12 UTC
Requires
- indieweb/link-rel-parser: 0.1.*
- mf2/mf2: >=0.3.2
README
一个简单的 HTTP 客户端,由 https://p3k.io 项目使用。
用法
GET
$http = new p3k\HTTP(); $headers = [ 'Accept: text/html, */*' ]; $response = $http->get('http://example.com/', $headers);
POST
$http = new p3k\HTTP(); $headers = [ 'Accept: application/json', 'Content-type: application/json' ]; $response = $http->post('http://example.com/', json_encode([ 'foo' => 'bar' ], $headers);
HEAD
$http = new p3k\HTTP(); $headers = [ 'Accept: text/html, */*' ]; $response = $http->head('http://example.com/', $headers);
响应
get/post/head 函数将返回一个包含以下属性数组的对象
code
- 整数,返回的 HTTP 响应码headers
- 数组,返回的 HTTP 头部rels
- 数组,从任何Link
头部解析的 HTTP rel 值body
- 字符串,HTTP 响应体,或对于 HEAD 请求为 false/省略error
- 字符串,错误信息。以下为错误列表。error_description
- 字符串url
- 字符串,在跟随任何重定向后检索的最终 URLdebug
- 字符串,完整的 HTTP 响应
头部
headers
键将是一个包含所有返回的头部值的数组。值将是一个字符串或数组,具体取决于是否为某个头部名称返回了多个值。
[headers] => Array
(
[Server] => nginx/1.12.0
[Content-Type] => text/html; charset=UTF-8
[Transfer-Encoding] => chunked
[Connection] => keep-alive
[Cache-Control] => no-cache
[Link] => Array
(
[0] => <https://switchboard.p3k.io/>; rel="hub"
[1] => <https://aaronparecki.com/auth>; rel="authorization_endpoint"
[2] => <https://aaronparecki.com/micropub>; rel="micropub"
[3] => <https://aaronparecki.com/auth/token>; rel="token_endpoint"
[4] => <https://aaronparecki.com/>; rel="self"
)
[Date] => Fri, 28 Apr 2017 18:40:42 GMT
[Strict-Transport-Security] => max-age=2592000
[X-No-Cache] => 0
[X-Cache] => EXPIRED
)
rels
rels
键将是包含 rel 值的任何 HTTP Link
头部的解析版本。所有值都将是一个数组,即使只有一个值。
[rels] => Array
(
[hub] => Array
(
[0] => https://switchboard.p3k.io/
)
[authorization_endpoint] => Array
(
[0] => https://aaronparecki.com/auth
)
[micropub] => Array
(
[0] => https://aaronparecki.com/micropub
)
[token_endpoint] => Array
(
[0] => https://aaronparecki.com/auth/token
)
[self] => Array
(
[0] => https://aaronparecki.com/
)
)
选项
在发送 HTTP 请求时,您可以设置一些选项来配置请求的行为。
$http->set_user_agent('String')
- 设置用户代理头部的快捷方式。$http->set_max_redirects(2)
- 要跟随的最大重定向数。默认为 8。$http->set_timeout(10)
- 等待响应的秒数。默认为 4。
用户代理
您可以在首次实例化 HTTP 对象时设置用户代理。
$http = new p3k\HTTP('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 p3k-http/0.1.0'); $http->get('http://example.com/');
或者,您可以在每次请求之前更改它。
$http = new p3k\HTTP(); $http->set_user_agent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 p3k-http/0.1.0'); $http->get('http://example.com/');
传输
默认情况下,库将使用 PHP curl 函数来发送 HTTP 请求。
您可以定义自己的传输来代替发送 HTTP 请求。这允许您使用现有的 HTTP 请求机制,而不是使用 curl 或 PHP 流函数。
定义一个实现 p3k\HTTP\Transport
接口的新类。该接口记录了期望的返回值。
然后您可以在创建主 HTTP 对象后设置传输。
$http = new p3k\HTTP(); $http->set_transport(new p3k\HTTP\Stream()); // or your custom class here
库提供了两个替代传输机制,p3k\HTTP\Stream
和 p3k\HTTP\Test
。Stream 传输使用 file_get_contents
以及所有必要的配置选项来使其工作。这在运行在 Google App Engine 时很有用。Test 传输将读取来自文件的 HTTP 响应,这样您就可以编写模拟发送 HTTP 调用的测试。有关使用此传输的示例,请参阅 https://github.com/aaronpk/XRay/tree/master/tests。
许可证
版权所有 2017 年 Aaron Parecki
MIT 许可证下可用。