我可以使用CURLOPT_HTTPHEADER多次调用curl_setopt来设置多个标题吗?


79

我可以打电话curl_setoptCURLOPT_HTTPHEADER多次设置多个标头?

$url = 'http://www.example.com/';

$curlHandle = curl_init($url);
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array('Content-type: application/xml'));
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array('Authorization: gfhjui'));

$execResult = curl_exec($curlHandle);

当只能执行一次并获得相同结果时,为什么要多次调用一个函数?您只是在付出更多的开销,并且可能会在各处使用标头声明混淆代码。
2014年

1
有条件地设置某些参数或者在过程中创建默认的curl句柄并稍后添加特定的标头可能会很有用。
Florian F

Answers:


116

在内部为请求执行curl时(通过此对“ Php-Debugging Curl”的回答中概述的方法),将回答以下问题:不,无法将curl_setopt调用与一起使用CURLOPT_HTTPHEADER。第二个调用将覆盖第一个调用的标头。

相反,该函数需要使用所有标头调用一次:

$headers = array(
    'Content-type: application/xml',
    'Authorization: gfhjui',
);
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, $headers);

相关(但不同)的问题是:


11

其他格式:

$headers[] = 'Accept: application/json';
$headers[] = 'Content-Type: application/json';
$headers[] = 'Content-length: 0';

curl_setopt($curlHandle, CURLOPT_HTTPHEADER, $headers);

0
/**
 * If $header is an array of headers
 * It will format and return the correct $header
 * $header = [
 *  'Accept' => 'application/json',
 *  'Content-Type' => 'application/x-www-form-urlencoded'
 * ];
 */
$i_header = $header;
if(is_array($i_header) === true){
    $header = [];
    foreach ($i_header as $param => $value) {
        $header[] = "$param: $value";
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.