我已经看到了几个相关的问题,但不幸的是,没有一个推荐的解决方案可以解决我的问题。我正在尝试使用 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 扩展版本中是否已经改变,因为没有任何建议按预期工作。
1 回答
- 1 回答
- 0 关注
- 124 浏览
添加回答
举报
0/150
提交
取消