如何使用Curl-PHP发送一个空白的accept头

如何使用Curl-PHP发送一个空白的accept头,php,curl,Php,Curl,我已经看到了一些相关的问题,但不幸的是,没有一个推荐的解决方案解决了我的问题 我正在尝试使用PHP curl发送一个空白的Accept头: PHP版本:7.3 德比安 /** *@param string$方法 *@param string$url *@param string$body *@param数组$headers * *@返回响应 */ 公共函数执行(字符串$method,字符串$url,字符串$body='',数组$headers=[]):响应 { $curlHeaders=[];

我已经看到了一些相关的问题,但不幸的是,没有一个推荐的解决方案解决了我的问题

我正在尝试使用PHP curl发送一个空白的Accept头:

PHP版本:7.3 德比安

/**
*@param string$方法
*@param string$url
*@param string$body
*@param数组$headers
*
*@返回响应
*/
公共函数执行(字符串$method,字符串$url,字符串$body='',数组$headers=[]):响应
{
$curlHeaders=[];
$isAcceptHeaderPresent=false;
$isExpectHeaderPresent=false;
$curl=\curl_init();
$response=新响应();
foreach($name=>$value的标题){
$curlHeaders[]=$value==''”?{$name};“:“{$name}:$value”;
$name=\strtolower($name);
如果($name=='accept'){
$isAcceptHeaderPresent=true;
}
如果($name=='expect'){
$isAcceptHeaderPresent=true;
}
}
if($isAcceptHeaderPresent==false){
$curlHeaders[]=“接受:”;
}
if($isExpectHeaderPresent==false){
$curlHeaders[]=“预期:”;
}
$options=[
CURLOPT_URL=>\str_replace(“”,'%20',$URL),
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_头=>false,
CURLOPT_FOLLOWLOCATION=>true,
CURLOPT_AUTOREFERER=>true,
CURLOPT_CONNECTTIMEOUT=>120,
CULLOPT_超时=>120,
CURLOPT_MAXREDIRS=>10,
CURLOPT_SSL_VERIFYPEER=>false,
CURLOPT_POSTFIELDS=>$body,
CURLOPT_HEADERFUNCTION=>[$response,'headerWrite'],
CURLOPT_WRITEFUNCTION=>[$response,'bodyWrite'],
CURLOPT_FILE=>$response->getbodyasresource(),
CURLOPT_HTTPHEADER=>$curlHeaders,
];
开关($方法){
案例“GET”:
案例“POST”:
案例“补丁”:
案件‘付诸表决’:
案例“头”:
案例“删除”:
案例“连接”:
案例“选项”:
“跟踪”案例:
$options[CURLOPT_CUSTOMREQUEST]=$method;
打破
违约:
抛出新的\异常('接收到不支持的HTTP方法:'。$method);
}
\curl_setopt_数组($curl$options);
\curl_exec($curl);
$response->setStatusCode(\curl\u getinfo($curl)['http\u code']);
\curl_close($curl);
返回$response;
}
如果提供了
Accept:
,则不会发送任何接收头

鉴于
接受这样,空白值将连同<代码> */*值一起发送:<代码>“接受”:“*/*,

有没有办法只按原样发送
Accept:
标题


我想知道在最近的两个PHP和curl扩展版本中,这个机制是否已经改变,因为没有一个建议是按照预期的方式工作的。

请参见github.com/docker-library/PHP/issues/832中的问题描述

当其他平台使用更新版本时,debian使用的是2.5y旧的curl软件包。一定是有一个bug导致了这种情况


如果您使用的是debian,并且希望使用curl发送一个空白的accept标头,则必须从(测试)repo将版本更新为7.64.0。

请参阅github.com/docker-library/php/issues/832中的问题描述

当其他平台使用更新版本时,debian使用的是2.5y旧的curl软件包。一定是有一个bug导致了这种情况


如果您使用的是debian,并且如果您想使用curl发送一个空白的accept头,那么您必须从(测试)repo将版本更新为7.64.0。

好的,我刚刚使用不同的Docker映像进行了测试,默认映像基于debian,它们的行为与我在帖子中描述的相同。(我测试了7.3、7.2、7.1、7.0和5.6)基于Alpple的图像很好,他们正在发送空白接受头。因此这是环境,只发生在基于Debian的平台上。为了将来的参考,我创建了下面的GITHUB问题:好的,我只是用不同的DOCKER图像来测试这个,默认的图像是Debian的,它们的行为和我的一样。我已经测试了7.3,7.2,7.1,7,和5.6)基于Alpon的图像是好的,他们正在发送空白接受标头。这是环境,只发生在基于Debian的平台上。为了将来的参考,我创建了下面的GITHUB问题: