对来自特定服务器的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>
但它没有帮助。
接下来我应该尝试什么?
问题是服务器似乎在"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);
});