Вы здесь

Как передавать параметры get запроса в drupal_http_request()?

0

Я иногда нарываюсь на эту проблему, но вот решил поинтересоваться с чем это связано, и есть ли хорошее решение?

Чтобы не ходить вокруг да около вот реальный пример.

Он выполняется только когда записан так:

$result = drupal_http_request("$request_url?$data", $options);

Но если записать его по правилам функции:

$result = drupal_http_request($request_url, array(
  'data' => $data,
));

Запрос выполняется, но сервисы на него реагирует кто как может. Например сабж модуля sms.ru ругается ошибкой авторизации, которой там к слову нет. Я на такое вроде ещё нарывался при построении запросов к соц. сетям. Они тоже такой формат не жрут. Аналогичную проблему я ловил с POST запросами для какой-то платежной системы (уже точно не помню), пришлось вообще в обход функции строить.

Также пробовал 'Content-Type' => 'application/x-www-form-urlencoded', но все безрезультатно, походу проблема в ином.

Версия Drupal: 
7.x
Связанные проекты: 
Drupal core
Вопрос задан 30.12.2016 - 14:12
Аватар пользователя Niklan
Niklan
445

Ответы

2

Любым снифером сравни запросы и получишь ответ - 'data' добавляется в body запроса, а не в адрес, т.е. этот параметр нужен только для POST запросов. В drupal_http_request() вообще не используется drupal_http_build_query(), поэтому делать GET запросы можно только первым способом.

Ответ дан 30.12.2016 - 15:38
Аватар пользователя xandeadx
xandeadx
1515

Да это я обращал внимание но как-то игнорировал. Не думал даже что у GET парсится это по разному. Лишь знал что у POST это имеет значение.

А что в таком случае использовать лучше cURL или так и продолжать формировать $var1 . $var2?

drupal_build_query() то да, я выше по коду генерирую, там строка то как раз такая и нужна для отправки. Просто именно проблемную часть вставил в качестве примера.

Комментарий оставлен 30.12.2016 - 15:52

а в курле то какой смысл? тебе лень сделать

'http://example.com/?' . drupal_http_build_query(array('foo' => 'bar'))
Комментарий оставлен 30.12.2016 - 15:55

Да не, просто может не кошерно и есть drupalway :D В общем раз так делают, значит ок.

Комментарий оставлен 30.12.2016 - 16:08