我正在为我的网络服务编写一个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?
谢谢!
答案 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获取分配给应用程序的秘密,然后使用相同的方法重建签名,最后比较应用程序发送的签名。