Как отправить форму на внешний сайт и получить сгенерированный 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 или аналогичный, как предлагается в других ответах.