سؤال

أحاول إنشاء اتصال بخادم يرسل خطأ المصادقة 401 للحصول على جميع طلباتي جنبا إلى جنب مع استجابة HTML العادية. على سبيل المثال، أود أيضا أن أقرأ استجابة HTML التي يتم إرسالها إلى حد ما بحيث يمكنني تحليل ذلك. تبادل رأس مثال تم التقاطه باستخدام LiveHttpheaders: بوضوح، طول المحتوى غير صفر. فايرفوكس يظهر أنه جافا سكريبت.

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

عند هذه النقطة، يفتح نموذج في فايرفوكس يطلب مني إدخال اسم المستخدم وكلمة المرور الخاصة بي.

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 آخر. ومع ذلك، فإن المشكلة التي لدي هي كيفية الحصول على محتوى Lenght 924 الذي يتم إرساله جنبا إلى جنب مع 401 غير المصرح به، لأن هذا المحتوى سوف يساعدني في القيام بما أريد القيام به أبعد من ذلك. لكن الخط:

WebResponse loginResponse = loginRequest.GetResponse();

يلقي استثناء.

سأكون ممتنا لأي اقتراحات لمساعدتي في الوصول إلى المحتوى الفعلي.

شكرا.

هل كانت مفيدة؟

المحلول

تحتاج إلى قراءة WebExceptionResponse الممتلكات، مثل هذا:

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