jdriscoll / curl-psr
用于使用 PSR-7 请求和响应对象与 Curl 的工具
v1.1.3
2019-06-16 14:29 UTC
Requires
- php: ^7.1
- jdriscoll/celery: ^1.3.0
Requires (Dev)
- phpunit/phpunit: ^7.0
README
这允许您使用 PSR-7 对象运行 Curl 请求。这有几个好处
- 它让您远离复杂的 Curl 语法,这在您要做的不仅仅是下载文件时特别有用
- 如果您使用代理,由于 PSR-7 ServerRequest 与 PSR-7 Request 兼容,因此代码更少。换句话说,修改后的
$request
通常可以正常工作。 - 发送响应更简单
- 流式响应更加直接
用法
$handler = new \CurlPsr\Handler();
$response = $handler->run(
$request->withUri(
$request->getUri()
->withPath("/")
->withHost("example.org")
->withScheme("http")
->withPort(80)
),
true,
10000
);
这个的主要目的是使 JSON API 代理更简单。
限制
这个不试图支持每个可能的 Curl 特性,也不支持 PSR-7 请求/响应中可以表达的所有内容。始终应该工作的关键功能包括
- 带有适当保留头部的 HEAD 请求
- 到可能或可能不流式的 JSON 端点的 GET 请求
- 通过 POST 传递的 JSON-RPC 请求和响应
- DELETE 请求
- OPTIONS 请求
- 短 JSON 资源的 PUT 请求
高级用法
如果您想并行执行两个或更多请求,您可以这样做。为此,您可以使用
$handler = new \CurlPsr\Handler();
$responses = $handler->withTimeout(10000)->runSimple(
$request1,
$request2
);
foreach($responses as $k => $response) {
if($response->getBody()->getSize()) {
echo "" . $response->getUri();
echo "" . $response->getBody();
}
}
runSimple()
的返回值实际上是一个迭代器,它将在多个对象上多次运行:一次用于头部,一次或多次用于体块,最后一次当传输已知完成时。响应附加的体将始终与最新的数据包保持一致,但不会报告大小,直到完成。
如果您想使用特定的键来更容易地区分响应,可以使用 runMap()
$handler = new \CurlPsr\Handler();
$responses = $handler->withTimeout(10000)->runMap([
"a" => $request1,
"b" => $request2
]);
foreach($responses as $k => $response) {
if($response->getBody()->getSize()) {
echo "" . $response->getUri();
echo "" . $response->getBody();
}
}