Как я могу отправить запрос на другую php-страницу в php-скрипте? У меня есть один интерфейсный компьютер в качестве сервера html-страницы, но когда пользователь нажимает кнопку, я хочу, чтобы внутренний сервер выполнял обработку, а затем отправлял информацию обратно на внешний сервер, чтобы показать пользователю. Я говорил, что у меня может быть php-страница на заднем компьютере, и она отправит информацию обратно на внешний интерфейс. Итак, еще раз, как я могу сделать запрос POST на другую php-страницу с php-страницы?
Опубликовать на другой странице в PHP-скрипте
Ответы:
Возможно, самый простой способ заставить PHP выполнять POST-запрос — использовать cURL либо как extension или просто передать другому процессу. Вот пример поста:
// where are we posting to?
$url = 'https://foo.com/script.php';
// what post fields?
$fields = array(
'field1' => $field1,
'field2' => $field2,
);
// build the urlencoded data
$postvars = http_build_query($fields);
// open connection
$ch = curl_init();
// set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars);
// execute post
$result = curl_exec($ch);
// close connection
curl_close($ch);
Также ознакомьтесь с набором классов Zend_Http в среде Zend, который предоставляет довольно способный HTTP-клиент, написанный непосредственно на PHP (расширения не требуются).
РЕДАКТИРОВАНИЕ 2014 года — я уже давно это не писал. Сейчас стоит проверить Guzzle, который снова может работать как с расширением curl, так и без него.
Предполагая, что ваша установка php имеет расширение CURL, это, вероятно, самый простой способ (и наиболее полный, если хотите).
Пример фрагмента:
//set POST variables
$url = 'https://domain.com/get-post.php';
$fields = array(
'lname'=>urlencode($last_name),
'fname'=>urlencode($first_name),
'email'=>urlencode($email)
);
//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string,'&');
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
//execute post
$result = curl_exec($ch);
//close connection
curl_close($ch);
Кредиты идут на https://php.dzone.com/news/execute-http-post-using-php-cu. Кроме того, не забудьте посетить соответствующие страницы в руководство по PHP
Для обработки PHP загляните в cURL. Это позволит вам вызывать страницы на вашем сервере и извлекать данные из него. В основном вы бы сделали что-то вроде этого:
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_URL,$fetch_url);
curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt ($ch,CURLOPT_USERAGENT, $user_agent;
curl_setopt ($ch,CURLOPT_CONNECTTIMEOUT,60);
$response = curl_exec ( $ch );
curl_close($ch);
Вы также можете изучить HTTP-расширение PHP.
Как и остальные пользователи, проще всего это сделать с помощью CURL.
Если curl недоступен для вас, возможно, https://netevil.org/blog/2006/nov/http-post-from-php-without-curl
Если это невозможно, вы можете сами написать сокеты https://petewarden.typepad.com/searchbrowser/2008/06/how-to-post-an.html
index.php
$url = 'https://[host]/test.php';
$json = json_encode(['name' => 'Jhonn', 'phone' => '128000000000']);
$options = ['http' => [
'method' => 'POST',
'header' => 'Content-type:application/json',
'content' => $json
]];
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
test.php
$raw = file_get_contents('php://input');
$data = json_decode($raw, true);
echo $data['name']; // Jhonn
Решение находится в target="_blank" следующим образом:
https://www.ozzu.com/website-design-forum/multiple-form-submit-actions-t25024.html
редактировать форму следующим образом:
<form method="post" action="../booking/step1.php" onsubmit="doubleSubmit(this)">
И используйте этот скрипт:
<script type="text/javascript">
<!--
function doubleSubmit(f)
{
// submit to action in form
f.submit();
// set second action and submit
f.target="_blank";
f.action="../booking/vytvor.php";
f.submit();
return false;
}
//-->
</script>
Хотя это и не идеально, но если опция cURL вам не подходит, попробуйте использовать shell_exec();
Метод CURL очень популярен, поэтому да, его можно использовать. Вы также можете объяснить больше этих кодов с некоторыми дополнительными комментариями, потому что начинающие могут их понять.