Публикация JSON с использованием CURL и переход на опубликованную страницу - PullRequest
1 голос
/ 05 ноября 2011

У меня есть набор страниц обработки php, которые взаимодействуют друг с другом путем передачи данных через get, но теперь мне нужно передать JSON между несколькими страницами обработки и мне нужна та же функциональность, что и при использовании GET.

Текущий рабочий метод get:

//The guts

header("Location: $moreprocessing_url/?userid=$id");

exit();

Затем в moreprocessing_url поднимается:

$userid = $_GET[id];

//More guts

$something = 'important';

header("Location: $public_url/?something=$something");

exit();

Так что теперь на первой странице обработки вместо отправки простой строки мне нужно отправитьJSON - поэтому я использую CURL для публикации JSON - но после публикации я хотел бы, чтобы страница была размещена, чтобы продолжить обработку и сделать остановку исходной страницы.То же самое, что и вышеприведенный код, но вместо этого используется CURL / post.Может быть, мое понимание CURL недостаточно сильное, и это просто невозможно?

Мой CURL:

$curl = curl_init($moreprocessing_url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, false);
curl_setopt($curl, CURLOPT_HTTPHEADER,
array("Content-type: application/json"));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

curl_exec($curl);
curl_close($curl);

exit();

Так что это возвращает на текущую страницу, где происходит CURL, а неmoreprocessing_url, который я хочу - это возможно?По сути, я хочу, чтобы страница была опубликована, чтобы она перешла, а та, которая отправляет CURL, остановилась.

1 Ответ

0 голосов
/ 05 ноября 2011

Я полагаю, вы пытаетесь это сделать:

  1. Браузер запрашивает guts.php
  2. guts.php сообщенийДанные в кодировке JSON в more-guts.php
  3. more-guts.php обрабатывает опубликованный JSON и возвращает 301 перемещенный временно ответ;новое местоположение public.php? что-то = важное
  4. guts.php получает этот ответ и передает его браузеру
  5. Браузер следует заredirect

Если это так, то вам нужно немного изменить свой скрипт cURL.Что-то вроде этих строк:

$curl = curl_init("url.php"); // the URL that processes your POST

curl_setopt($curl, CURLOPT_POST, true); // use POST method
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json")); // set POST header
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // set POST body

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // send output to a variable for processing
curl_setopt($curl, CURLOPT_HEADER, true); // set to true if you want headers in the output
curl_setopt($ch, CURLOPT_NOBODY, true); // set to true if you do not want the body
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); // set to false if you want to see what redirect header was sent

$output = curl_exec($curl);
curl_close($curl);

var_dump($output);

В зависимости от значений, используемых для CURLOPT_HEADER и CURLOPT_NOBODY, переменная $output будет содержать заголовок ответа, тело или оба (они разделены двумя пустыми строками),Если вы хотите что-то из заголовка, вы можете использовать регулярные выражения для извлечения нужного заголовка и отправки его в браузер.

ИЛИ вы можете повторить тело, если захотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...