0

我正在尝试卷曲页面(server.php)并在标题中发送三个变量($webServiceId $hash 和 $timestamp),如下所示。如何从 server.php 的标头中获取两个变量,以便处理它们并发送响应?我试过用谷歌搜索和搜索here,但我似乎无法找出方法。

$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

Authorization: URL-Encoded-API-Key 不在那里。我可以错误地设置卷曲标题吗?

4

3 回答 3

0

我从未使用过getallheaders(),但文档说它读取当前请求的标头,这不是您正在做的。

答案就在这里: PHP cURL 可以在单个请求中检索响应标头和正文吗?

将所有标题作为字符串获取后,然后将其分解,只需使用 astrstr()或正则表达式遍历每个标题即可获取值。

于 2012-08-02T21:46:59.300 回答
0

你这样做是错的。“CURLOPT_HEADER”只是一个布尔值,用于在输出中显示请求和响应标头。您需要使用“CURLOPT_HTTPHEADER”,它需要一个标头数组,并用于将标头与请求一起传递。

看:http ://www.php.net/manual/en/function.curl-setopt.php

于 2012-08-02T22:34:26.123 回答
0

该函数getallheaders()将返回完整的请求标头。如果您从中调用它,server.php您应该能够接收使用 cURL 发送的自定义标头。

http://php.net/manual/en/function.getallheaders.php

编辑

顺便说一句,您需要引号server.php

curl_setopt($ch, CURLOPT_URL, 'server.php');

编辑 2

我使用 2 个脚本对其进行了测试:

客户端.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 );

服务器.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"));
于 2012-08-02T21:16:26.000 回答