Открытие в браузере ответа от cURL (php)

119
10 мая 2021, 06:40

В наличии: браузер с js, сервер с php и cURL.

Цель: отправить данные на другой сайт (Яндекс.Деньги) с помощью php и показать страницу с его ответом в браузере.

Проблемы:

  1. нельзя использовать ajax в js (Access-Control-Allow-Origin).
  2. нельзя использовать file_get_contents в php (allow_url_fopen=0).

Сейчас:

  1. Отправляю данные POST запросом через ajax на мой сервер.
  2. Мой сервер данные проверяет, творит магию.
  3. Мой сервер отправляет данные в Яндекс, используя cURL.
  4. Мой сервер отдаёт в браузер ответ от другого сайта.

Вопрос: Как отобразить ответ другого сервера заместо той страницы, которую сейчас показывает браузер?

Если использовать echo, то я получаю строку, которую в js могу показать где угодно в отображаемой странице. Но это не то, чего нужно добиться, ведь ответ другого сервера - html со своими натюрмортом. Должно получиться как будто я выполнил window.open с "_blank" (но она не поддерживает POST).

Часть кода:

$request_headers = array();
$request_headers[] = 'Content-Type:application/x-www-form-urlencoded';
$post_data = json_encode($values);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$html = curl_exec($ch);
curl_close($ch);    
echo $html;
Answer 1

Исключите из вашей схемы AJAX и всё заработает. Если нужен POST-запрос используйте форму, отправить её можно и js'ом (form.submit()).

Обратите внимание, что тело HTTP-ответа это ещё не весь "натюморт" (есть ещё заголовки, например куки).

А вообще у Яндекс.Денег есть API для интеграции (думаю, это как раз то что вы хотите сделать).

Answer 2

Как мне кажется, ответ на Ваш вопрос: https://stackoverflow.com/questions/2109205/open-window-in-javascript-with-html-inserted

var win = window.open("", "Title", "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=780,height=200,top="+(screen.height-400)+",left="+(screen.width-840));
win.document.body.innerHTML = "HTML";
READ ALSO
Как сменить кодировку или заменить символ замены в функции file_get_contents

Как сменить кодировку или заменить символ замены в функции file_get_contents

Пытаюсь прочитать файл в котором написано:

119
LAMP, Настройка apache2

LAMP, Настройка apache2

сразу извинияюсь если вопрос поставлен не правильноСуть, сайт на хостинге работает нормально

81
Как создать отправить и обработать многомерный массив php

Как создать отправить и обработать многомерный массив php

Имеется цикл foreach который выводит таблицу в html и заполняет данными

86
MySQL #1292 - Truncated incorrect DOUBLE value

MySQL #1292 - Truncated incorrect DOUBLE value

Обращаюсь к базе с запросом

70