В этой статье я хочу показать как с помощью php функции file_get_contents можно отправлять post запрос. Запрос можно делать ка на свой сервер так и на сторонний. Для примера можно создать локальный тестовый домен test.web, и создать в его корне скрипт index.php с таким кодом:
$a = $_POST['a']; $b = $_POST['b']; echo $a + $b;
Теперь необходимо создать другой локальный сайт, например test_2.web. На этом сайте создадим такой скрипт:
// массив для переменных, которые будут переданы с запросом $paramsArray = array( 'a' => '5', 'b' => '10' ); // преобразуем массив в URL-кодированную строку $vars = http_build_query($paramsArray); // создаем параметры контекста $options = array( 'http' => array( 'method' => 'POST', // метод передачи данных 'header' => 'Content-type: application/x-www-form-urlencoded', // заголовок 'content' => $vars, // переменные ) ); $context = stream_context_create($options); // создаём контекст потока $result = file_get_contents('http://test.web/index.php', false, $context); //отправляем запрос var_dump($result); // вывод результата
После запуска скрипта, результат должен быть число 15.
На этом все, оказывается отправка пост-запросов можно сделать быстро и просто, и не обязательно использовать cUrl.
Подскажите что должно быть в файле на сервер чтобы результат выполнения данного скрипта был такой:
string(1) «1»
Вроде это просто тупо 1, но ни echo 1; ни print 1; ни просто 1 без php не дают такого ответа((
Достаточно даже без php вывести любой текст. Возможно вы посылаете запрос не на тот адрес? Что у Вас на данный момент выводится в результате?
Здравствуйте, прошло много времени, но надеюсь ответите.
Такая проблема,
необходимо из формы отправить данные через POST на другой сервер, где там они заносятся в базу. Локально для теста создан проект, который обрабатывается отельным php (‘p.php’), который в свою очередь отправляет через file_get_content в другой php (‘p2.php’).
делаю все как указано:
p.php:
$paramArray = array(/*переменные*/);
$vars = http_build_query($paramArray);
$options = array('http' => array(
'method' => 'POST', // метод передачи данных
'header' => 'Content-type: application/x-www-form-urlencoded', // заголовок
'content' => $vars
));
$context = stream_context_create($options);
$result = file_get_contents('./php2.php', false, $context); //отправляем запрос
p2.php
//подключение БД
//Заполнение из форм
/*тут заполнение из POSTа типа:*/
$name = $_POST['name'];
//Вставка в БД
$q = "INSERT INTO `order` SET
/*параметры, все проверено, отдельно добавляют все правильно*/
$r = mysqli_query($res, $q);
Что я делаю не так? При подключении напрямую p2.php работает все правильно. Но мне необходимо, что бы это делалось через отправку через POST
В файле p2.php посмотрите — что приходит через POST:
print_r($_POST);
exit();
Супер, хороший пример.
Доброго времени суток!
Добрые люди, подскажите, мне не понятно как отправлять Post-запрос: по ссылки https://online.petrolplus.ru/public-api/v1/transaction-list
чтобы в теле запроса передать json структуру:
{
“token”: “ hupevm8KsaxuUhyEBRznmMjg2”,
“dateFrom”: “2015-05-01”,
“dateTo”: “2015-05-03”,
“format”: “JSON”
}
Можете описать последовательность действий для чайников?
Заранее благодарен,
С Уважением, Евгений
Жаль, что вам не ответили.
Если через file_get_contents то вероятнее всего:
$url = ‘https://online.petrolplus.ru/public-api/v1/transaction-list?’;
$data= [‘token’=>’ hupevm8KsaxuUhyEBRznmMjg2′, ‘dateFrom’ =>’2015-05-01′, ‘dateTo’=>’2015-05-03’, ‘format’=>’JSON’];
$postdata = http_build_query($arr)
$context = array(‘http’=>
array(‘method’ => ‘POST’,’header’ => ‘Content-type: application/x-www-form-urlencoded’,’content’ =>$data);
$context = stream_context_create($context);
$result = file_get_contents($url, false, $context);
Выше отправил ответ с опечатками. Вот работающий код:
$url = ‘https://online.petrolplus.ru/public-api/v1/transaction-list?’;
$data= [‘token’=>’ hupevm8KsaxuUhyEBRznmMjg2′, ‘dateFrom’ =>’2015-05-01′, ‘dateTo’=>’2015-05-03’, ‘format’=>’JSON’];
$postdata = http_build_query($data);
$context = array(‘http’=>
array(‘method’ => ‘POST’,’header’ => ‘Content-type: application/x-www-form-urlencoded’,’content’ =>$postdata );
$context = stream_context_create($context);
$result = file_get_contents($url, false, $context);