Добавление переменных для метода 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, затем перестройте подпись, используя тот же метод, и, наконец, сравните подпись, отправленную приложением.

Другие вопросы по тегам