Добавление переменных для метода GET с помощью 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);
У меня вопрос, как я могу (если это возможно) включить данные (appSecret, appKey) в метод GET?
И если нет, то как я могу использовать метод GET, чтобы получить информацию о пользователе и при этом проверить appKey и appSecret на сервере?
Спасибо!
3 ответа
В запросе GET аргументы передаются в разделе "запрос" URL-адреса.
http://www.google.com/search?q=url+query
Аргументы, передаваемые таким образом, должны быть специально закодированы ("URL-кодировка"), потому что определенные символы имеют особое значение.
Почему бы не поместить их в свой URL, например так:
$ url = "http://mydomain.com/api/user/".$uid."?arg1=value1&arg2=value2";
Если вы хотите поместить appKey и appSecret в заголовок запроса GET, используйте:
$authorization = sprintf('Authorization: AppLogin key="%s", secret="%s"', urlencode($appKey), urlencode($appSecret));
curl_setopt($request, CURLOPT_HTTPHEADER, array($authorization));
Затем на вашем REST-сервере вы можете получить ключ и секретный ключ приложения из $_SERVER['HTTP_AUTHORIZATION'] через preg_match.
Вы также можете использовать базовый метод подписи вместо передачи 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, затем перестройте подпись, используя тот же метод, и, наконец, сравните подпись, отправленную приложением.