@TopClans

Почему не отправляется значение PHP переменной через POST?

Нужно отправить запрос на некий сайт такого вида: site.ru/text?AAA=aaa&BBB=bbb&CCC=ccc, а перед этим эти самые aaa, bbb, ccc узнать у пользователя.
Узнали через форму, записали в переменные $a, $b, $c.
Сделали общую переменную: $send = site.ru/text?AAA=$a&BBB=$b&CCC=$c
Осталось эту самую переменную методом либо POST либо GET отправить на другой сайт.
Для подстраховки вывожу себе значение переменной $send, чтобы проверить, что мы там насобирали из форм. Значение всегда верно, и если его скопировать и вставить в адресную строку - то получатель эту команду обработает.

Осталось попробовать заставить скрипт отправлять эти данные самостоятельно.
Попробовал сначала обойтись без cURL, вычитал метод передачи через сокеты - не сработало.
Тогда решил подключать cURL, но всё равно я получаю тот же ответ: не указан первый параметр (AAA). Полагаю, что-то обрезает всё что находится после /?, поскольку если для интереса ввести URL просто site.ru (без /text/), то в ответ у меня начинает главная страница сайта.

Вот пример отправки значения (кстати, он взят из схожего вопроса на тостере, и других примеров с других сайтов я перепробовал немало - не работает ничего).

$myCurl = curl_init();
curl_setopt_array($myCurl, array(
    CURLOPT_URL => 'http://site.ru/text/',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => http_build_query(array($send))
));
$response = curl_exec($myCurl);
curl_close($myCurl);

echo "Ответ на Ваш запрос: ".$response;


Есть ли способ вывести себе и посмотреть, что отправляет скрипт?

UPDATE:
опытным путем выяснил, что обрезается всё что стоит после знака ?.
Если отправить запрос site.ru/text, то ответ будет: не указаны данные параметра. Если отправить не переменную а текст site.ru/text?AAA=aaa, то ответ будет: не указан параметр AAA.
Так что теперь стоит новый вопрос: почему обрезается вторая половина запроса?
  • Вопрос задан
  • 1152 просмотра
Пригласить эксперта
Ответы на вопрос 1
Denormalization
@Denormalization
Так вы шлете "site.ru/text?AAA=$a&BBB=$b&CCC=$c" как POST параметры. Конечно сервер будет ругаться.
Вам нужно сделать так:
$send = array(
   'aaa' => $a,
   'bbb' => $b,
   'ccc' => $c
);
$myCurl = curl_init();
curl_setopt_array($myCurl, array(
    CURLOPT_URL => 'http://site.ru/text/',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => http_build_query(array($send))
));
$response = curl_exec($myCurl);
curl_close($myCurl);

echo "Ответ на Ваш запрос: ".$response;


Дополню:
CURLOPT_URL - тут вы указываете URL на который нужно слать запрос, у вас тут все верно
CURLOPT_POSTFIELDS - тут нужно указывать ТЕЛО запроса, а вы передавали сюда весь URL. Функция http_build_query по-сути просто собирает массив в последовательность "aaa=$a&bbb=$b" (это если грубо)

Возможно вам не нужен метод POST? Если при вставке в браузер у вас "site.ru/text?AAA=$a&BBB=$b&CCC=$c" работает правильно, то может вам нужен GET запрос? Для GET можно просто использовать file_get_contents($url); например.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы