我的系统需要使用外部服务进行身份验证(以任何方式不受我的控制),并且身份验证需要非常短的序列中的两个 HTTP 请求(我在第一个请求中获得的令牌在 2 秒后过期,我必须使用它来完成认证过程)。
所以我基本上是这样做的:
// create client
$client = HttpClient::create();
$baseUrl = "https://example.com/webservice.php";
$username = "foo";
$token = "foobarbaz";
// first request
$tokenResponse = $client->request( Method::GET, $baseUrl . '?operation=getchallenge&username=' . $username );
$decoded = $tokenResponse->toArray();
// second request
$loginResponse = $client->request( Method::POST, $this->baseUrl, [
'body' => [
'operation' => 'login',
'username' => $username,
'accessKey' => md5( $decoded['result']['token'] . $token ),
],
]
);
$sessionData = $loginResponse->toArray();
这样做,我得到一个异常(TransportExceptionInterface
):
无法向“ https://example.com/webservice.php ”的对等方发送数据
但是,如果我不使用相同的实例,而是$client
实例化一个新的($client2 = HttpClient::create();
我的猜测是,这与 HTTP 客户端使用的默认请求并发有关,但我检查了文档和可用的选项,HttpClientInterface
但无论如何我都没有以不需要我的方式更改客户端行为创建一个新实例(也不是增加错误记录详细程度的方法)。
我安装了 cURL 扩展,所以正在创建的客户端是CurlHttpClient
而不是NativeHttpClient
.
有没有办法解决这个问题,而不必创建一个新的客户端实例?