StatusCode 401로 응답 내용 가져오기
-
19-09-2019 - |
문제
일반적인 HTML 응답과 함께 모든 요청에 대해 401 인증 오류를 보내는 서버에 대한 연결을 설정하려고 합니다.예를 들어그러나 나는 또한 함께 전송된 HTML 응답을 읽고 이를 분석하고 싶습니다.LiveHTTPHeaders를 사용하여 캡처한 헤더 교환 예시:분명히 content-length는 0이 아닙니다.Firefox에서는 자바스크립트로 표시됩니다.
https://172.31.1.251:1003/fgtauth?73e285357b2dc5cc
Request:
GET /fgtauth?73e285357b2dc5cc HTTP/1.1
Host: 172.31.1.251:1003
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Response:
HTTP/1.x 401 Unauthorized
WWW-Authenticate: Fortigate
Content-Length: 1091
Connection: Keep-Alive
Cache-Control: no-cache
Content-Type: text/html
이 시점에서 Firefox에서 내 사용자 이름과 비밀번호를 입력하라는 양식이 열립니다.
https://172.31.1.251:1003/
Request:
POST / HTTP/1.1
Host: 172.31.1.251:1003
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: https://172.31.1.251:1003/
Content-Type: application/x-www-form-urlencoded
Content-Length: 93
magic=73e285357b2dc5cc&username=uuxx&password=xxuu&4Tredir=http%3A%2F%2Fwww.google.com%2F
Response:
HTTP/1.x 401 Unauthorized
WWW-Authenticate: Fortigate
Content-Length: 924
Connection: Keep-Alive
Cache-Control: no-cache
Content-Type: text/html
이 시점에서 다른 URL로 리디렉션됩니다.그러나 내가 가진 문제는 401 Unauthorized와 함께 전송되는 길이 924의 콘텐츠를 얻는 방법입니다. 왜냐하면 해당 콘텐츠가 내가 원하는 작업을 더 수행하는 데 도움이 되기 때문입니다.그러나 바로 그 라인 :
WebResponse loginResponse = loginRequest.GetResponse();
예외가 발생합니다.
실제 콘텐츠를 얻는 데 도움이 되는 제안을 보내주시면 감사하겠습니다.
감사해요.
해결책
당신은 읽어야 WebException
'에스 Response
속성은 다음과 같습니다.
WebResponse loginResponse;
try {
loginResponse = loginRequest.GetResponse();
} catch(WebException ex) {
if (ex.Status == WebExceptionStatus.ProtocolError) {
loginResponse = ex.Response;
} else
throw;
}
//Do something with the response, and remember to dispose it.
제휴하지 않습니다 StackOverflow