使用curl为GET方法添加变量

时间:2011-01-23 19:15:39

标签: php rest curl

我正在为我的网络服务编写一个RESTful API 当我收到服务器的请求时,我要做的第一件事就是检查appKey和appSecret 这不是POST方法的问题,因为我可以将它们添加到请求中,如下所示:
(此方法返回用户的详细信息)

$data = array('appId'=>$appId, 
              'appSecret'=>$appSecret,
              'userId'=>$uid);
$url = "http://mydomain.com/api/user/".$uid;
$request = curl_init($url);
curl_setopt($request, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($request);

我的问题是我怎样才能(如果可能的话)在GET方法中包含数据(appSecret,appKey)?

如果没有,我如何使用GET方法获取用户的详细信息并仍检查服务器上的appKey和appSecret?

谢谢!

3 个答案:

答案 0 :(得分:4)

在GET请求中,参数在URL的“查询”部分中传递。

http://www.google.com/search?q=url+query

以这种方式传递的参数必须经过特殊编码(“URL编码”),因为某些字符具有特殊含义。

答案 1 :(得分:2)

为什么不将它们放在您的网址中,如下所示:

$ url =“http://mydomain.com/api/user/”。$ uid。“?arg1 = value1& arg2 = value2”;

答案 2 :(得分:1)

如果你想把appKey和appSecret放在GET请求的标题中,请使用:

$authorization = sprintf('Authorization: AppLogin key="%s", secret="%s"', urlencode($appKey), urlencode($appSecret));
curl_setopt($request, CURLOPT_HTTPHEADER, array($authorization));

然后在您的REST服务器上,您可以通过preg_match从$ _SERVER ['HTTP_AUTHORIZATION']获取应用密钥和密钥。

您也可以使用基本签名方法,而不是每次都传递appSecret。

$nonce = sha1(mt_rand());
$signature = sha1("$appKey:$appSecret:$nonce");
$authorization = 'Authorization: AppLogin key="%s", signature="%s", nonce="%s"', urlencode($appKey), urlencode($signature), urlencode($nonce));

然后在服务器上,首先从Authorization标头获取值,然后根据appKey获取分配给应用程序的秘密,然后使用相同的方法重建签名,最后比较应用程序发送的签名。