Skip to content

Commit 9532877

Browse files
authored
Merge pull request #21 from RunnerLee/3.0
处理 http 100 continue 的情况
2 parents e0d9114 + 4635e67 commit 9532877

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

src/Request.php

+9-2
Original file line numberDiff line numberDiff line change
@@ -310,8 +310,15 @@ public function send($data = [], array $headers = [])
310310
}
311311

312312
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
313-
curl_close($ch); unset($ch);
314-
list($responseHeaders, $response) = explode("\r\n\r\n", $response, 2);
313+
curl_close($ch);
314+
unset($ch);
315+
// handle 100 continue message
316+
// see: https://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.3
317+
// see: https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status/100
318+
// see: https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Expect
319+
$responseInfo = explode("\r\n\r\n", $response);
320+
$response = array_pop($responseInfo);
321+
$responseHeaders = array_pop($responseInfo);
315322
$responseHeaders = preg_split('/\r\n/', $responseHeaders, null, PREG_SPLIT_NO_EMPTY);
316323

317324
array_shift($responseHeaders);

tests/RequestTest.php

+12
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,18 @@ public function testRequestTarget()
5454
$this->assertEquals(200, $response->getStatusCode());
5555
}
5656

57+
public function testRequestWithLargeBody()
58+
{
59+
$request = new Request('POST', 'https://passport.baidu.com/v2/api/?login');
60+
61+
$response = $request->send([
62+
'a' => str_repeat('10000', 10000),
63+
]);
64+
65+
$this->assertSame(true, count($response->getHeaders()) > 0);
66+
$this->assertSame(302, $response->getStatusCode());
67+
}
68+
5769
public function testResponseWithEncoding()
5870
{
5971
$request = $this->server();

0 commit comments

Comments
 (0)