2015-10-31 3 views
2

У меня есть запрос на скручивание PHP, который работает. Однако, если я установил CURLOPT_FOLLOWLOCATION как 1, сообщение Curl отправлено с postdata, переадресованная страница HTML будет захвачена и отправлена ​​на моем локальном сервере.Переадресация запроса Curl с данными

Весь перенаправление содержится на моем локальном сервере, и он фактически не передает мне перенаправление непосредственно с данными (это то, что я хочу). После нескольких секунд загрузки html на моем post.php он перенаправляется на страницу, которая не найдена.

Однако, если я установил CURLOPT_FOLLOWLOCATION как 0, а затем вернул правильный URL-адрес, а затем перенаправил его через header("Location: $redirect"); - он передает штраф, но больше не передается данных.

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

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); 
curl_setopt($ch, CURLOPT_VERBOSE, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLINFO_HEADER_OUT, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, 'postdata=' . urlencode(xmlGrab())); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded')); 
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 

// Download the given URL, and return output 
$output = curl_exec($ch); 
$headers = substr($output, 0, $curl_info["header_size"]); //split out header 
$redirect = curl_getinfo($ch)['redirect_url']; 

header('HTTP/1.1 307 Temporary Redirect'); 
header("Location: $redirect"); 

// Close the cURL resource, and free system resources 
curl_close($ch); 

Пример сценарий:

  • пользователя отправляет сообщение в http://localhost:8888/post.php
  • Post.php содержит соединение с Google.co.uk
  • post.php соединяет и делает запись в google.co.uk
  • Запрос загружает google.co.uk?q=blahblah для post.php
  • post.php выглядит точно так же, как google.co.uk?q=blahblah
  • через 3 секунды, он перенаправляет на HTTP; // локальный: 8888/д = blahblah
+1

"затем добавляет его обратно на мой локальный сервер" - а? Не знаете, что вы имели в виду. Пожалуйста, перефразируйте его. –

+0

@ KarolyHorvath добавил немного больше объяснений –

+0

Извините, не понимаю этого. –

ответ

0

Проверьте значение $redirect.

Если это относительный URL-адрес, вы должны добавить протокол + имя хоста + и т.д. к URL-адресу, иначе вы окажетесь на локальном сервере.

Смежные вопросы