Как отправить форму на внешний сайт и получить сгенерированный HTML?

Я хотел бы сделать скрипт с использованием PHP (вероятно, нужен JS), чтобы отправить данные POST на другую веб-страницу и получить результат обратно.

Например, домен A будет иметь форму с текстовым полем и кнопкой отправки, а домен B будет иметь скрипт, который заполнит текстовое поле и нажмет кнопку отправки и вернет сгенерированную страницу HTML.

3 ответа

Решение

Следующие строки кода могут быть написаны на другом PHP-скрипте,

//set POST variables
$url = 'the website from which you need data through post';
$fields = array(
            //post parameters to be sent to the other website
            'text'=>urlencode($_POST['text']), //the post request you send to this  script from your domain.
        );

//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);

Теперь $result будет содержать текст, полученный с другого сайта.

С JS: по соображениям безопасности нет. Читайте о той же политике происхождения.

С PHP вы можете делать то, что вы хотите, в том числе POSTиспользование других серверов. Например, используйте CURL.

--- Оригинальный ответ 2012 ---

Использовать jquery; просто загрузите страницу с помощью вызова $.ajax(). Если вам нужно, вы можете использовать "jsonp", который обходит ограничения между вызовами страниц из разных доменов.

Хорошая вещь об использовании javascript в том, что вам не нужны серверные языки.

--- 2018 редактировать ---

Теперь я понимаю, что вы не можете сделать POST с jsonp (так как он по сути только для чтения), поэтому это будет работать только в том случае, если веб-сайт принимает форму как GET (то есть параметры в URL). В противном случае лучше всего использовать Curl или аналогичный, как предлагается в других ответах.

Другие вопросы по тегам