Я пытаюсь заставить curl следовать перенаправлению, но я не могу заставить его работать правильно. У меня есть строка, которую я хочу отправить в качестве параметра GET на сервер и получить полученный URL-адрес.
Пример:
Строка = Kobold Паразит
URL = www.wowhead.com/search?q=Kobold+Worker
Если вы перейдете по этому URL, он перенаправит вас на «www.wowhead.com/npc=257». Я хочу, чтобы curl вернул этот URL в мой PHP-код, чтобы я мог извлечь «npc = 257» и использовать его.
Текущий код:
function npcID($name) {
$urltopost = "http://www.wowhead.com/search?q=" . $name;
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1");
curl_setopt($ch, CURLOPT_URL, $urltopost);
curl_setopt($ch, CURLOPT_REFERER, "http://www.wowhead.com");
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type:application/x-www-form-urlencoded"));
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
return curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
}
Это, однако, возвращает www.wowhead.com/search?q=Kobold+Worker, а не www.wowhead.com/npc=257 .
Я подозреваю, что PHP возвращается до того, как произойдет внешнее перенаправление. Как я могу это исправить?
curl
команды, передайте флаг-L
или--location
. Напримерcurl -L http://example.com/
Ответы:
Чтобы заставить cURL следовать перенаправлению, используйте:
Хм ... я не думаю, что вы на самом деле выполняете завиток ... Попробуйте:
curl_exec($ch);
... после настройки параметров и перед
curl_getinfo()
вызовом.РЕДАКТИРОВАТЬ: Если вы просто хотите узнать, куда перенаправляется страница, я бы воспользовался здесь советом и просто использовал Curl, чтобы получить заголовки и извлечь из них заголовок Location:
источник
Добавьте эту строку для инициализации curl
и использовать getinfo перед curl_close
эс:
источник
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
- это уязвимость безопасности. По сути, он гласит: «Игнорируйте ошибки SSL, если они сломаны - доверяйте так же, как и незашифрованному URL».Ответ выше не работал для меня на одном из моих серверов, что-то, что связано с basedir, поэтому я немного перефразировал его. Код ниже работает на всех моих серверах.
источник
Location:
Заголовок не всегда следовать редирект. Также, пожалуйста, смотрите вопрос, который явно об этом: curl follow error locationВыбранный ответ здесь приличный, но он чувствителен к регистру, не защищает от относительных
location:
заголовков (что делают некоторые сайты) или страниц, на которых может содержаться фразаLocation:
… (что в настоящее время делает zillow).Немного небрежно, но несколько быстрых правок, чтобы сделать это немного умнее:
Обратите внимание, что это все еще только 1 перенаправление глубоко. Чтобы пойти глубже, вам действительно нужно получить контент и следовать перенаправлениям.
источник
Иногда вам нужно получить заголовки HTTP, но в то же время вы не хотите возвращать эти заголовки. **
Этот скелет заботится о куки и перенаправлениях HTTP с использованием рекурсии. Основная идея здесь состоит в том, чтобы избежать возврата HTTP-заголовков клиентскому коду.
Вы можете создать очень сильный класс локонов над ним. Добавить функциональность POST и т. Д.
источник
Здесь много регулярных выражений, несмотря на тот факт, что они мне действительно нравятся, и это может быть более стабильным для меня:
Часть location - это ссылка в HTML, отправленная apache. Так что Xpath идеально подходит для его восстановления.
источник
Ты можешь использовать:
источник