Как эмулировать настоящий http-запрос через cfhttp?

Мне нужно эмулировать настоящий http-запрос через cfhttp. Я получал rss-канал с помощью ColdFusion, но сегодня вечером они начали блокировать мой запрос и присылать в ответ индексную страницу вместо rss-канала.

Я добавил юзерагент для cfhttp, но это не помогает.

Opera, Firefox и Chrome корректно открывают ленту с одного компьютера.


person maectpo    schedule 31.05.2010    source источник


Ответы (2)


Ага, спасибо. Я пронюхал все заголовки HTTP, которые браузер отправляет на сайт, а затем эмулировал их в запросе cfhttp. Решение:

<cfhttp url="http://example.com/feed" 
useragent="Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.7 (KHTML, like Gecko) Chrome/5.0.391.0 Safari/533.7"
result="httpresult"
redirect="false"
>
<cfhttpparam type="header" name="HTTP_REFERER" value="http://example.com/feed/" >
<cfhttpparam type="header" name="Accept-Encoding" value="gzip,deflate,sdch" >
<cfhttpparam type="header" name="Proxy-Connection" value="keep-alive" >
<cfhttpparam type="header" name="Accept" value="application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5">
<cfhttpparam type="header" name="Accept-Language" value="en-US,en;q=0.8">
<cfhttpparam type="header" name="Accept-Charset" value="ISO-8859-1,utf-8;q=0.7,*;q=0.3">
<cfhttpparam type="cookie" name="some-cookie" value="1">

person maectpo    schedule 01.06.2010
comment
Для тех, кто может найти это в будущем, я не думаю, что заголовок для реферера должен быть именем http_referer (именно так оно появляется в области CGI CF), а вместо этого просто реферером. Похоже, это не имело значения в запросе OP, но может быть критично для других, вызывающих какой-либо сервер, если он действительно проверяет этот заголовок. (И не позволяйте ничему исправлять тип referer. В то время как в английском языке это пишется с двумя буквами r, в спецификации http это пишется с одной.) - person charlie arehart; 18.11.2018

Я предполагаю, что сайт с RSS-каналом все еще обнюхивает пользовательский агент, а CFHTTP не установлен на тот, который использует сайт. Используйте HTTP Proxy Sniffer (например, Charles HTTP Proxy) для записи HTTP-запроса браузера, который правильно отображает RSS-канал, а затем попробуйте использовать CFHTTP с той же строкой агента пользователя, что и ранее успешный запрос.

Если он по-прежнему не работает, используйте атрибуты «proxyport» и «proxyserver» CFHTTP для запуска запроса ColdFusion через анализатор HTTP и убедитесь, что пользовательский агент установлен правильно, и сравните его с рабочим запросом.

person David Collie    schedule 31.05.2010
comment
Также стоит проверить другие заголовки, а не только user-agent. (Возможно, удаляющий сервер ищет файлы cookie или заголовки accept-*.) - person Peter Boughton; 31.05.2010
comment
Вы также можете попробовать использовать прокси на другом сервере, если они блокируют IP. - person Ben Doom; 31.05.2010