문제

일반적인 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.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top