问题描述
我需要设置一些以“:”开头的自定义标头。
$option['headers'][] = ":authority: example.com"; //<-- Here is the problem
$option['headers'][] = "accept-encoding: gzip,deflate,br";
$option['post'] = json_encode(array("Domain"=>"example.com"));
$url = "https://www.google.com";
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/62.0.3202.62 Safari/537.36");
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_COOKIEFILE,"file.cookie");
curl_setopt($ch,CURLOPT_COOKIEJAR,CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,CURLOPT_HEADER,CURLOPT_VERBOSE,true);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,CURLOPT_POST,CURLOPT_POSTFIELDS,$option['post']);
curl_setopt($ch,CURLOPT_HTTPHEADER,$option['headers']);
$getdata = curl_exec($ch);
我尝试用chr(58)替换“:”,但存在相同的问题。我收到错误55,并从日志“ *无法发送HTTP POST请求”中获取错误。如果我评论第一行正在工作,但我确实需要该标头。我被困在这里。有解决方案吗?
解决方法
:authority:
看起来像HTTP / 2伪标题,您不能使用curl设置它们。但是curl将自己传递它,并且它将使用与为Host:
设置的内容相同的内容,以使其以相同的方式工作,而与最终使用的HTTP版本无关(它也将与HTTP / 3一起使用) )。