У меня есть запрос на скручивание 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
"затем добавляет его обратно на мой локальный сервер" - а? Не знаете, что вы имели в виду. Пожалуйста, перефразируйте его. –
@ KarolyHorvath добавил немного больше объяснений –
Извините, не понимаю этого. –