WedX - журнал о программировании и компьютерных науках

Опубликовать на другой странице в PHP-скрипте

Как я могу отправить запрос на другую php-страницу в php-скрипте? У меня есть один интерфейсный компьютер в качестве сервера html-страницы, но когда пользователь нажимает кнопку, я хочу, чтобы внутренний сервер выполнял обработку, а затем отправлял информацию обратно на внешний сервер, чтобы показать пользователю. Я говорил, что у меня может быть php-страница на заднем компьютере, и она отправит информацию обратно на внешний интерфейс. Итак, еще раз, как я могу сделать запрос POST на другую php-страницу с php-страницы?

02.08.2009

Ответы:


1

Возможно, самый простой способ заставить 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, так и без него.

02.08.2009
  • вы правы, я обычно выбираю URL-безопасные ключи, но изменю образец... 02.08.2009
  • Если у вас нет своего сервера, есть вероятность, что вы можете столкнуться с проблемой, что PHP и, следовательно, cURL не могут покинуть локальную сеть. 12.09.2009
  • @Paul Этот ответ все еще актуален? 11.06.2018

  • 2

    Предполагая, что ваша установка 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

    02.08.2009

    3

    Для обработки 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.

    02.08.2009
  • Я знаю про аякс. Моя страница использует ajax, но, другими словами, мне нужна внутренняя сетевая связь между моим сервером переднего плана и моим внутренним интерфейсом. Я не хочу, чтобы пользователь мог напрямую общаться с внутренним сервером. Итак, как я могу позволить интерфейсу общаться с сервером, используя php? 02.08.2009
  • Я проголосовал против, поскольку ОП не спрашивал, как этого добиться на стороне клиента, а на стороне сервера. 02.08.2009
  • Он сказал, нажмите кнопку, обработайте, а затем покажите данные. Почти в каждом втором вопросе люди сразу обращаются к AJAX. 02.08.2009
  • Хорошо, jQuery полностью удален, а вместо него стоит cURL. Извините за недопонимание 02.08.2009

  • 4
    1. Как и остальные пользователи, проще всего это сделать с помощью CURL.

    2. Если curl недоступен для вас, возможно, https://netevil.org/blog/2006/nov/http-post-from-php-without-curl

    3. Если это невозможно, вы можете сами написать сокеты https://petewarden.typepad.com/searchbrowser/2008/06/how-to-post-an.html

    02.08.2009

    5

    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
    
    24.09.2019

    6

    Решение находится в 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>
    
    27.08.2016

    7

    Хотя это и не идеально, но если опция cURL вам не подходит, попробуйте использовать shell_exec();

    15.02.2019

    8

    Метод CURL очень популярен, поэтому да, его можно использовать. Вы также можете объяснить больше этих кодов с некоторыми дополнительными комментариями, потому что начинающие могут их понять.

    06.11.2009
  • Извините, популярность не оправдывает того, что это хорошо. 06.10.2016
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]