我已经看到了几个相关的问题,但不幸的是,没有一个推荐的解决方案可以解决我的问题。
我正在尝试使用 PHP curl 发送一个空白的 Accept 标头:
PHP 版本:7.3 Disto:Debian
/**
* @param string $method
* @param string $url
* @param string $body
* @param array $headers
*
* @return Response
*/
public function execute(string $method, string $url, string $body = '', array $headers = []): Response
{
$curlHeaders = [];
$isAcceptHeaderPresent = false;
$isExpectHeaderPresent = false;
$curl = \curl_init();
$response = new Response();
foreach ($headers as $name => $value) {
$curlHeaders[] = $value === '' ? "{$name};" : "{$name}: $value";
$name = \strtolower($name);
if ($name === 'accept') {
$isAcceptHeaderPresent = true;
}
if ($name === 'expect') {
$isAcceptHeaderPresent = true;
}
}
if ($isAcceptHeaderPresent === false) {
$curlHeaders[] = 'Accept: ';
}
if ($isExpectHeaderPresent === false) {
$curlHeaders[] = 'Expect: ';
}
$options = [
CURLOPT_URL => \str_replace(' ', '%20', $url),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_AUTOREFERER => true,
CURLOPT_CONNECTTIMEOUT => 120,
CURLOPT_TIMEOUT => 120,
CURLOPT_MAXREDIRS => 10,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_POSTFIELDS => $body,
CURLOPT_HEADERFUNCTION => [$response, 'headerWrite'],
CURLOPT_WRITEFUNCTION => [$response, 'bodyWrite'],
CURLOPT_FILE => $response->getBodyAsResouce(),
CURLOPT_HTTPHEADER => $curlHeaders,
];
如果Accept:提供,则不会以任何方式发送 Accept 标头。
而Accept;这样做,空白值也将与*/*值一起发送:"accept":"*/*,
有没有办法按Accept:原样发送标题?
我想知道这个机制在最近几个 PHP 和 curl 扩展版本中是否已经改变,因为没有任何建议按预期工作。