使用 CURL 发送自定义标头
Posted
技术标签:
【中文标题】使用 CURL 发送自定义标头【英文标题】:Sending Custom Header with CURL 【发布时间】:2012-11-26 02:14:09 【问题描述】:我想通过如下所示的 API 向 Web 服务发送请求,我必须通过 一个自定义的 http 标头(哈希),我正在使用 CURL,我的代码似乎可以工作,但我没有得到 正确的响应,我被告知它与哈希值有关,尽管该值有 被认为是正确的,我通过它的方式有什么问题吗? 代码本身。
<?php
$ttime=time();
$hash="123"."$ttime"."dfryhmn";
$hash=hash("sha512","$hash");
$curl = curl_init();
curl_setopt($curl,CURLOPT_HTTPHEADER,array('Hash:$hash'));
curl_setopt ($curl, CURLOPT_URL, 'http://web-service-api.com/getresult.xml?clientid=456&time=$ttime');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$xml = curl_exec ($curl);
if ($xml === false)
die('Error fetching data: ' . curl_error($curl));
curl_close ($xml);
echo htmlspecialchars("$xml", ENT_QUOTES);
?>
【问题讨论】:
【参考方案1】:如果您需要在 php 中获取和设置自定义 http 标头,以下简短教程非常有用:
发送请求标头
$uri = 'http://localhost/http.php';
$ch = curl_init($uri);
curl_setopt_array($ch, array(
CURLOPT_HTTPHEADER => array('X-User: admin', 'X-Authorization: 123456'),
CURLOPT_RETURNTRANSFER =>true,
CURLOPT_VERBOSE => 1
));
$out = curl_exec($ch);
curl_close($ch);
// echo response output
echo $out;
读取自定义标题
print_r(apache_request_headers());
你应该看到
Array
(
[Host] => localhost
[Accept] => */*
[X-User] => admin
[X-Authorization] => 123456
[Content-Length] => 9
[Content-Type] => application/x-www-form-urlencoded
)
使用 PHP CGI 自定义标头
在 .htaccess 中
RewriteEngine On
RewriteRule .? - [E=User:%HTTP:X-User, E=Authorization:%HTTP:X-Authorization]
从 $_SERVER 读取自定义标头
echo $_SERVER['User'];
echo $_SERVER['Authorization'];
资源
http://www.omaroid.com/php-get-and-set-custom-http-headers/ How can I get PHP to display the headers it received from a browser?【讨论】:
【参考方案2】:'Hash:$hash'
应该是"Hash: $hash"
(双引号)或'Hash: '.$hash
CURLOPT_URL
中传递的 URL 也是如此
【讨论】:
耶!认为是变量插值一直困扰着我。以上是关于使用 CURL 发送自定义标头的主要内容,如果未能解决你的问题,请参考以下文章