我正在尝试卷曲页面(server.php)并在标头中发送三个变量($ webServiceId $ hash和$ timestamp),如下所示。如何从server.php中的标题中获取两个变量,以便我可以处理它们并发送响应?我在这里尝试使用谷歌搜索和搜索,但我似乎无法找到如何。
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'server.php');
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: URL-Encoded-API-Key {$webServiceId},{$hash},{$timestamp}"));
$response = curl_exec($ch);
curl_close ($ch);
// dump response
print_r( $response );
如果server.php回显了通过响应收到的标题,那么$ response的print_r会产生:
HTTP/1.1 200 OK Date: Thu, 02 Aug 2012 22:18:59 GMT Server: LiteSpeed Connection: close X-Powered-By: PHP/5.3.14 Allow: GET
授权:URL-Encoded-API-Key不在那里。我可以将curl标头设置错误吗?
答案 0 :(得分:0)
函数getallheaders()
将返回完整的请求标头。如果您从server.php
拨打电话,则应该能够收到通过cURL发送的自定义标头。
http://php.net/manual/en/function.getallheaders.php
修改强>
顺便说一句,您需要server.php
附近的引号:
curl_setopt($ch, CURLOPT_URL, 'server.php');
编辑2
我使用2个脚本测试了它:
<强> client.php 强>
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1/server.php');
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: URL-Encoded-API-Key 12,12113132,1330032113"));
$response = curl_exec($ch);
curl_close ($ch);
// dump response
var_dump( $response );
<强> server.php 强>
var_dump(getallheaders());
致电client.php
时,我收到以下回复:
array(3) {
["Host"]=>
string(9) "127.0.0.1"
["Accept"]=>
string(3) "*/*"
["Authorization"]=>
string(42) "URL-Encoded-API-Key 12,12113132,1330032113"
}
我的猜测是您的自定义标头格式不正确。尝试使用简单的标题,看看它是否有效:
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: 123456"));
答案 1 :(得分:0)
我从未使用过getallheaders()
,但是文档说它会读取当前请求的标题,这不是你正在做的事情。
答案在这里: Can PHP cURL retrieve response headers AND body in a single request?
将所有标题作为字符串后,然后将其展开,只需使用strstr()
或正则表达式获取值即可。
答案 2 :(得分:0)
你做错了。 “CURLOPT_HEADER”只是一个在输出中显示请求和响应头的bool。您需要使用“CURLOPT_HTTPHEADER”,它需要一个标头数组,并用于通过请求传递标头。