对来自特定服务器的HTTP响应感到困惑

本文关键字:响应 HTTP 服务器 | 更新日期: 2023-09-27 18:06:54

如果我在浏览器中访问http://www.alexandriava.gov/rss.aspx, Chrome开发人员工具控制台告诉我服务器响应状态200,我得到一些XML,一切都很好。

如果我写一些代码来远程访问它:

node . js

var h = require("http");
h.get("http://www.alexandriava.gov/rss.aspx", function(resp){
    console.log(resp);
}).on("error", function(err){
    console.error("ERROR ===========================");
    console.error(err);
});

我得到状态码302,因为最终它试图重定向到一个ASP。. NET错误页面。下面是响应头:

date: 'Fri, 06 Jun 2014 03:17:11 GMT',
server: 'Microsoft-IIS/6.0',
'x-powered-by': 'ASP.NET',
'set-cookie':
  [ 'COASTATS=539132b724041115851869612717; domain=.alexandriava.gov; expires=Tue 30-Dec-2031 23:59:59 GMT; path=/','ecm=user_id=0&isMembershipUser=0&site_id=&username=&new_site=/&unique_id=0&site_preview=0&langvalue=0&DefaultLanguage=1033&NavLanguage=1033&LastValidLanguageID=1033&DefaultCurrency=840&SiteCurrency=840&ContType=&UserCulture=1033&dm=www.alexandriava.gov&SiteLanguage=1033; path=/',
    'EktGUID=b56f532c-011d-4ccc-98cb-7a1b3e170fcf; expires=Sat, 06-Jun-2015 03:17:11 GMT; path=/',
    'EkAnalytics=0; expires=Sat, 06-Jun-2015 03:17:11 GMT; path=/' ],
'x-aspnet-version': '2.0.50727',
location: '/handle500.aspx?aspxerrorpath=/rss.aspx',
'cache-control': 'private',
'content-type': 'text/html; charset=utf-8',
 'content-length': '164' }

即使是这个非常简单的c#代码

using (var reader = System.Xml.XmlReader.Create("http://www.alexandriava.gov/rss.aspx"))
{
    var rss = System.ServiceModel.Syndication.SyndicationFeed.Load(reader);
    return rss.Description.Text;
}

初始请求错误。状态:"ProtocolError",消息:"The remote server returned an error: (500) Internal server error ."

我不太了解HTTP请求,不知道我的浏览器和代码之间的区别是什么。我正在尝试阅读的网站应该使用自己的RSS源来生成首页。

认为这可能是相关的(解析RSS时出错),我尝试了建议的Web。配置改变。

<configuration>
    <system.net>
        <settings>
            <httpWebRequest useUnsafeHeaderParsing="true" />
        </settings>
    </system.net>
</configuration>

但它没有帮助。

接下来我应该尝试什么?

对来自特定服务器的HTTP响应感到困惑

问题是服务器似乎在"User-Agent"头中寻找特定的东西,当它不匹配它所期望的任何东西时,它会抛出错误。

要解决这个问题,添加一个类似于浏览器使用的用户代理(您可以通过查看用于查看200响应的Chrome Developer工具的Network选项卡来找到它)。

我使用了这样一个用户代理:

User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36

并且我能够成功地下载RSS xml文件。但是当我没有特别设置User-Agent时,我收到了500错误,就像您收到的一样。

我相信在Node.JS中你可以这样设置user-agent:

var h = require("http");
h.get({
    host: "www.alexandriava.gov", 
    path: "/rss.aspx", 
    headers: { 
      'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'
    }
}, function(resp){
console.log(resp);
}).on("error", function(err){
console.error("ERROR ===========================");
console.error(err);
});