2011-09-01 4 views
0

기본적으로 서버에서 파일을 다운로드하려고합니다. 서버는 괜찮 자동으로 리디렉션을 보내지 만 패킷을 통해 성공적으로 (두 번째 요청의 경우) 헤더는 것을 내가 찾은 파일 다운로드 않는 프로그램 스니핑 : 인 현재의 응답보다 오히려C# 서버 이름없이 HttpWebRequest 보내기

GET /path/to/file.txt 
... 
Host: server.com 

을 500 서버 오류에 정상의 HttpWebRequest 방법의 결과를 사용

GET www.server.com/path/to/file.txt 

, 나는 사람이 기대하는 것처럼 단지 상대 경로를 사용하려고 할 때 발생한 예외를 얻을 : 생성 (내가 생각하는 표준이었다). AllowAutoRedirect를 사용하면 쿠키가 제대로 처리되지 않으므로이 시나리오에서는 작동하지 않지만 수동으로 처리하더라도 동일한 오류가 발생합니다.

어떻게하면이 작업을 수행 할 수 있습니까? (소켓이없는 것이 좋음)?

+1

게시물의 "표준"GET이 부러진 것처럼 보입니다. [HTTP 1.1 *에는 * 호스트 헤더가 필요합니다] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23) -이 경우 URI는 서버 기준 일 수도 있습니다 . 더 많은 제어가 필요한 경우 302/303/307은 항상 수동으로 처리 할 수 ​​있습니다. –

+0

파일을 가져 오기 위해 어떤 패키지를 사용하고 있습니까? HttpClient는 NuGet을 통해 사용할 수 있으며 System.Net 클래스보다 훨씬 사용하기 쉽습니다. – Jason

+0

감사합니다. @pst, 당신이 옳았습니다 (내가 생각한 것) 표준 요청이 옳지 않습니다. HttpWebRequest에 의해 생성 된 요청은 호스트를 보내고 있지만 여전히 위와 같이 GET 라인에 넣습니다. 이것을 제거하는 방법이 있습니까? 그것은 나의 요구와 작동하는 것과 다른 것을 볼 수있는 유일한 것입니다. 나는 300 개의 요청을 수동으로 처리하고있다. 하나는 내가 처리하고있는 것은 Location 헤더를 되돌려 보내고, 다음 요청에 이것을 사용하려고한다. (오직 2 개의 쿠키가 서버에서 보내졌고 나의 CookieContainer가 저장하는 것처럼 보인다. 하나는 AllowAutoRedirect를 사용할 때) – James

답변

0

솔직히 말해서 나는 당신이 무엇을 요구하고 있는지 정말로 모르지만 쿠키 문제를 언급했습니다. 어둠의 추측에서 총을 쏜 것처럼 WebRequest에서 CookieContainer를 설정하고 있습니까?

request.CookieContainer = new CookieContainer(); 
request.AllowAutoRedirect = true; 
+0

나는이 사진을 주었지만, 내가 원하는 쿠키 중 하나만 가지고 있다는 것을 알았다. 수동으로 쿠키를 가져 와서 다른 요청을 할 수 있도록 자동 리디렉션을 사용하지 않도록 설정했지만 내 요청이 두 번째로 유효하지 않은 것으로 보입니다. 기본적으로 내가 알아야 할 것은 어떻게하면 두 번째보다는 내가 보여준 첫 번째 예처럼 내 요청을받을 수 있는가입니다. – James

관련 문제