如何通过cfhttp模拟真实的http请求?

7

我需要通过cfhttp模拟真实的http请求。之前我一直在使用ColdFusion获取rss订阅,但今晚他们开始阻止我的请求,并返回索引页面而不是rss feed。

我已经为cfhttp添加了用户代理,但并没有起到帮助作用。

Opera、Firefox和Chrome可以从同一台计算机上正确打开该订阅源。

2个回答

6

好的,谢谢。我嗅探了浏览器发送到该网站的所有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">


对于未来可能遇到此问题的任何人,我认为 referer 的头部名称不应该是 "http_referer"(这是在 CF 的 CGI 范围中出现的方式),而应该只是 "referer"。这似乎对 OP 的请求没有影响,但如果其他人调用某个服务器并且它确实检查该头,则可能非常重要。(而且不要让任何东西更正 referer 的拼写。虽然在英语中它拼写为两个 r,但在 http 规范中它只拼写为一个。) - charlie arehart

4
我猜测带有 RSS 源的站点仍在嗅探用户代理,而 CFHTTP 没有设置为站点正在使用的代理。请使用 HTTP 代理嗅探器(例如 Charles HTTP 代理)记录正确显示 RSS 源的浏览器的 HTTP 请求,然后尝试使用与先前成功请求相同的用户代理字符串使用 CFHTTP。
如果仍然不起作用,请使用 CFHTTP 的“proxyport”和“proxyserver”属性通过您的 HTTP 嗅探器运行 ColdFusion 请求,并检查是否正确设置了用户代理,并与正常请求进行比较。

还值得检查其他标头,而不仅仅是用户代理。 (也许删除服务器正在寻找cookie或接受-*标头。) - Peter Boughton
你可能也想尝试在另一台服务器上使用代理,以防他们通过IP进行阻止。 - Ben Doom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接