Skip to content

Commit f4f6d81

Browse files
KurtThiemannnicolas-grekas
authored andcommitted
[HttpClient] Always set CURLOPT_CUSTOMREQUEST to the correct HTTP method in CurlHttpClient
1 parent 18725f0 commit f4f6d81

File tree

3 files changed

+24
-3
lines changed

3 files changed

+24
-3
lines changed

CurlHttpClient.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,13 +197,12 @@ public function request(string $method, string $url, array $options = []): Respo
197197
$curlopts[\CURLOPT_RESOLVE] = $resolve;
198198
}
199199

200+
$curlopts[\CURLOPT_CUSTOMREQUEST] = $method;
200201
if ('POST' === $method) {
201202
// Use CURLOPT_POST to have browser-like POST-to-GET redirects for 301, 302 and 303
202203
$curlopts[\CURLOPT_POST] = true;
203204
} elseif ('HEAD' === $method) {
204205
$curlopts[\CURLOPT_NOBODY] = true;
205-
} else {
206-
$curlopts[\CURLOPT_CUSTOMREQUEST] = $method;
207206
}
208207

209208
if ('\\' !== \DIRECTORY_SEPARATOR && $options['timeout'] < 1) {

Tests/HttpClientTestCase.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -651,4 +651,26 @@ public function testDefaultContentType()
651651

652652
$this->assertSame(['abc' => 'def', 'content-type' => 'application/json', 'REQUEST_METHOD' => 'POST'], $response->toArray());
653653
}
654+
655+
public function testHeadRequestWithClosureBody()
656+
{
657+
$p = TestHttpServer::start(8067);
658+
659+
try {
660+
$client = $this->getHttpClient(__FUNCTION__);
661+
662+
$response = $client->request('HEAD', 'http://localhost:8057/head', [
663+
'body' => fn () => '',
664+
]);
665+
$headers = $response->getHeaders();
666+
} finally {
667+
$p->stop();
668+
}
669+
670+
$this->assertArrayHasKey('x-request-vars', $headers);
671+
672+
$vars = json_decode($headers['x-request-vars'][0], true);
673+
$this->assertIsArray($vars);
674+
$this->assertSame('HEAD', $vars['REQUEST_METHOD']);
675+
}
654676
}

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"php": ">=8.1",
2626
"psr/log": "^1|^2|^3",
2727
"symfony/deprecation-contracts": "^2.5|^3",
28-
"symfony/http-client-contracts": "~3.4.3|^3.5.1",
28+
"symfony/http-client-contracts": "~3.4.4|^3.5.2",
2929
"symfony/service-contracts": "^2.5|^3"
3030
},
3131
"require-dev": {

0 commit comments

Comments
 (0)