2014-06-06 2 views
0

내 브라우저에서 http://www.alexandriava.gov/rss.aspx으로 이동하면 Chrome 개발자 도구 콘솔에서 서버가 상태 200에 응답하고 일부 XML이 표시되고 모두 우주에 잘 들어 있다고 알립니다.특정 서버의 HTTP 응답에 혼동이 있음

내가 원격으로 액세스 할 몇 가지 코드를 작성하는 경우 :

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", 메시지 : "원격 서버에서 오류를 반환했습니다 : (500) 내부 서버 오류."

브라우저와 코드 사이의 차이점을 알고 HTTP 요청에 대해 충분히 이해하지 못합니다. 내가 읽으려고하는 사이트는 RSS 피드를 사용하여 프론트 페이지를 생성합니다.

이것은 (Error when Parsing RSS)와 관련이 있다고 생각하여 제안 된 Web.config 변경을 시도했습니다.

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

하지만 도움이되지 않았습니다.

다음에 시도해야 할 사항은 무엇입니까?

+0

쿠키가 다른가요? 기본적으로 대부분의 프로그래밍 방식 HTTP API는 쿠키를 저장하고 포함하도록 설정되지 않습니다. –

+0

브라우저와 비슷한 사용자 에이전트 헤더를 추가하십시오. –

답변

2

문제는 서버가 "User-Agent"헤더에서 특정 항목을 찾은 것 같고 어떤 기대치와도 일치하지 않으면 오류가 발생합니다. 이 문제를 해결하려면

이 브라우저가 사용하는 어떤 유사한 사용자 에이전트를 추가 (당신은 당신이 200 응답을 참조하기 위해 사용하는 크롬 개발자 도구의 네트워크 탭을 검토하여이를 찾을 수 있습니다.

내가 사용 이 같은 사용자 에이전트 :.

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 파일을 성공적으로 을 다운로드 할 수 있었다하지만 특히 사용자 에이전트를 설정하지 않은 경우, 나는 당신이했던 것처럼 500 오류가 발생했습니다 .

나는 Node.JS를 사용하여 사용자 에이전트를 설정하려고합니다.

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); 
}); 
+0

감사합니다. 내가 이것을 작성하고 "브라우저와 코드 간의 차이"를 썼을 때 사용자 에이전트가 마음에 들었지 만 노드에서 설정하는 방법을 알지 못했고 결국에는 나쁜 버그로 보였다. 그래도 나는 무엇을 기대해야합니까? – moron4hire

+1

동의합니다. 그것은 "엄청나게 나쁜 버그"입니다. 나는 Node.JS가 기본적으로 일종의 사용자 에이전트를 보낸다고 확신한다. 서버를 크래시하는 것은 꽤 어리 석다. Chrome에서 보낸 모든 헤더를보고 C# WebClient를 사용하여 동일한 헤더를 보내면 User-Agent라는 것을 알았습니다. 그게 효과가있어서, 하나씩 헤더를 지우기 시작했고, User-Agent를 제거했을 때 500 에러가 발생했다. – ricovox

+0

부지런함에 감사드립니다. 나는 시청으로 행진 할 준비가되어 있었고 책임자를 만나길 원했다. P – moron4hire

관련 문제