我可以多次使用 CURLOPT_HTTPHEADER 调用 curl_setopt 来设置多个标头吗?
Posted
技术标签:
【中文标题】我可以多次使用 CURLOPT_HTTPHEADER 调用 curl_setopt 来设置多个标头吗?【英文标题】:Can I call curl_setopt with CURLOPT_HTTPHEADER multiple times to set multiple headers? 【发布时间】:2013-02-14 14:05:40 【问题描述】:我可以多次调用curl_setopt
和CURLOPT_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);
【问题讨论】:
当你只能执行一次并获得相同的结果时,为什么还要多次调用一个函数?您只是在提供更多开销,并且您可能会在整个地方都使用标头声明来混淆代码。 有条件地设置一些参数或者在过程中创建默认 curl 句柄并稍后添加特定标头可能很有用。 【参考方案1】:按照 curl 在内部对请求所做的操作(通过this answer to "php - Debugging Curl" 中概述的方法)回答了这个问题:否。
不,不能将curl_setopt
调用与CURLOPT_HTTPHEADER
一起使用多次,每次都传递一个标头,以便设置多个标头。
第二次调用将覆盖前一次调用(例如第一次调用)的标题。
相反,该函数需要使用所有标头调用一次:
$headers = array(
'Content-type: application/xml',
'Authorization: gfhjui',
);
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, $headers);
相关(但不同)的问题是:
How to send a header using a HTTP request through a curl call?(命令行卷曲) How to get an option previously set with curl_setopt()? (curl PHP 扩展)【讨论】:
【参考方案2】:其他类型的格式:
$headers[] = 'Accept: application/json';
$headers[] = 'Content-Type: application/json';
$headers[] = 'Content-length: 0';
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, $headers);
【讨论】:
【参考方案3】:/**
* 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'
* ];
*/
$header; //**
if (is_array($header))
$i_header = $header;
$header = [];
foreach ($i_header as $param => $value)
$header[] = "$param: $value";
【讨论】:
以上是关于我可以多次使用 CURLOPT_HTTPHEADER 调用 curl_setopt 来设置多个标头吗?的主要内容,如果未能解决你的问题,请参考以下文章
ReactJS useEffect Hook - 在组件中多次使用?
我可以通过 graphQL 查询多次查询 GraphQL 单一响应吗?