p3k/http

PHP curl 函数的简单封装 API

0.1.12 2021-10-12 14:12 UTC

This package is auto-updated.

Last update: 2024-09-12 20:16:39 UTC


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 - 字符串,在跟随任何重定向后检索的最终 URL
  • debug - 字符串,完整的 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\Streamp3k\HTTP\Test。Stream 传输使用 file_get_contents 以及所有必要的配置选项来使其工作。这在运行在 Google App Engine 时很有用。Test 传输将读取来自文件的 HTTP 响应,这样您就可以编写模拟发送 HTTP 调用的测试。有关使用此传输的示例,请参阅 https://github.com/aaronpk/XRay/tree/master/tests

许可证

版权所有 2017 年 Aaron Parecki

MIT 许可证下可用。