2013-08-30 1 views
0

Вот мой код:Curl еще перенаправлять после установки FOLLOWLOCATION в FALSE

$url='http://celebcrust.com/?p=15055'; 

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE); 
curl_setopt($ch, CURLOPT_URL,   $url); 
curl_setopt($ch, CURLOPT_HEADER,   TRUE);     
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE); 

$httpData = curl_exec($ch); 
var_export($httpData); 

Этот код как interactive demo on phpdiffle.org.

Почему он по-прежнему перенаправляется? Я пытаюсь перенаправить URL-адрес. Я установил FOLLOWLOCATION на FALSE, но все же.

+0

Каков ваш вопрос? Вопросы, требующие кода, должны ** демонстрировать минимальное понимание проблемы, которая решается **. Включите попытки решения, почему они не работают, и ожидаемые * результаты. См. Также: [Контрольный список вопросов переполнения стека] (http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist) – hakre

+1

Не могли бы вы привести пример URL-адреса, где вы видите это поведение, и быть немного более ясно о том, что именно происходит? «этот код с этим сайтом - произойдет следующее: изменив эту строку, это произойдет. Я хотел бы, чтобы XXX произошел. Как мне это сделать?» Ваше текущее описание более запутанно, чем вы понимаете. – Floris

+0

Возможный дубликат [Curl, следовать за местоположением, но только получить заголовок нового местоположения?] (Http://stackoverflow.com/questions/6129000/curl-follow-location-but-only-get-header-of-the- new-location) – hakre

ответ

1

Хорошо, вот как я отлаживать эти вещи быстро (это не работает всегда, но для первой попытки ударить резину на дороге больше контактов, это обычно делает это):

Требования: Curl для командная строка (доступен, вероятно, для каждой компьютерной системы на земле, посетите домашнюю страницу, если вы не имеете его еще нет):

-i является список заголовков, а также (используйте -I для запроса HEAD, если приходит слишком много данных), а затем -v для подробных (показывает, что происходит):

$ curl -iv 'http://celebcrust.com/?p=15055' 
* Adding handle: conn: 0xa50260 
* Adding handle: send: 0 
* Adding handle: recv: 0 
* Curl_addHandleToPipeline: length: 1 
* - Conn 0 (0xa50260) send_pipe: 1, recv_pipe: 0 
* About to connect() to celebcrust.com port 80 (#0) 
* Trying 70.32.78.224... 
* Connected to celebcrust.com (70.32.78.224) port 80 (#0) 
> GET /?p=15055 HTTP/1.1 
> User-Agent: curl/7.30.0 
> Host: celebcrust.com 
> Accept: */* 
> 
< HTTP/1.1 200 OK 
HTTP/1.1 200 OK 
< Date: Sat, 31 Aug 2013 14:29:54 GMT 
Date: Sat, 31 Aug 2013 14:29:54 GMT 
* Server Apache is not blacklisted 
< Server: Apache 
Server: Apache 
< X-Pingback: http://celebcrust.com/xmlrpc.php 
X-Pingback: http://celebcrust.com/xmlrpc.php 
< X-Powered-By: PleskLin 
X-Powered-By: PleskLin 
< Content-Length: 159 
Content-Length: 159 
< Connection: close 
Connection: close 
< Content-Type: text/html; charset=UTF-8 
Content-Type: text/html; charset=UTF-8 

< 
<META HTTP-EQUIV=Refresh CONTENT="0; URL=http://www.celebgossip.com/2013/04/willie-nelson-celebrates-80th-birthday-stoned-and-auditi 
oning-for-gandalf-39425/"> 
* Closing connection 0 

Как показано на рисунке, сервер не отправляет заголовок Location:, поэтому это полностью объясняет, что вы его не видите.

Вместо этого он отправляет HTML в тело ответа, которое анализируется гипертекстовым клиентом (webbrowser) для значения заголовка HTTP-эквивалента Refresh:.

Это не бурение локон. Вам нужно добавить парсер HTML и проверить их, я предлагаю DOMDocument с его методом ->loadHTML().

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

  • Нет связанных вопросов^_^