كيف يمكنني القراءة في C# XML من صفحة أخرى أثناء تسجيل الدخول إلى الموقع

StackOverflow https://stackoverflow.com/questions/1079233

سؤال

لقد قمت بتسجيل الدخول إلى الموقع باستخدام متصفح الويب الخاص بي وكلما حاولت الاتصال

WebClient myWebClient = new WebClient();
string str = myWebClient.DownloadString("http://localhost/myxml.aspx");
Response.Write(str.ToString());

أو

XmlTextReader reader = new XmlTextReader(url);
while (reader.Read()) {
 Response.Write(reader.ReadOuterXml());
} 

Response.Write يعيد لي صفحة تسجيل الدخول.

هل هناك طريقة لإرفاق معرف جلسة المستخدم بـ WebClient أو XmlTextReader أو كيف يمكنني طلب صفحة أخرى في C# مع المستخدم المسجل الحالي؟

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

المحلول

ستحتاج إلى استخدام كائن يمكنه التعامل مع تخزين ملفات تعريف الارتباط.في هذه الحالة، سوف تحتاج إلى HttpWebRequest فصل.ستحتاج أيضًا إلى أ CookieContainer لإدارة ملفات تعريف الارتباط المصادقة.

للقيام بذلك، يمكنك:

  1. إنشاء CookieContainer كائن (جرة ملفات تعريف الارتباط) يمكنك تتبعه في نطاق كل طلب تقوم به.
  2. يخترع HttpWebRequest الذي يسجل الدخول إلى الموقع الذي تدخل إليه.
  3. استخدم ال CookieContainer قمت بإنشائه في الخطوة 1 لكل طلب لاحق.

فيما يلي مثال لكيفية استخدام http.WebRequest, http.WebResponse, ، و CookieContainer الطبقات معًا لتقديم طلب بسيط من شأنه تعيين بعض ملفات تعريف الارتباط، ثم استخدام ملفات تعريف الارتباط هذه في طلب لاحق.يجب أن يكون الباقي سهلاً على افتراض أن كل شيء تم تشكيله بشكل جيد ;)

CookieContainer cookieJar = new CookieContainer();

var webRequest = (HttpWebRequest)HttpWebRequest.Create("http://www.google.com");
webRequest.CookieContainer = cookieJar;

var webResponse = webRequest.GetResponse();

using (var reader = new StreamReader(webResponse.GetResponseStream()))
{
    Response.Write(reader.ReadToEnd());
}

var anotherWebRequest = (HttpWebRequest)HttpWebRequest.Create("http://www.google.com/search?q=stackoverflow.com");
anotherWebRequest.CookieContainer = cookieJar;

webResponse = anotherWebRequest.GetResponse();

خيار آخر (إذا كنت تريد حقًا استخدام WebClient class) سيكون لتحليل ResponseHeaders ملكية الفصل بمجرد تقديم طلبك وإدراج ملفات تعريف الارتباط المناسبة في طلبك التالي.يعد هذا الأمر أكثر تعقيدًا لأنه يتطلب منك إدارة ملفات تعريف الارتباط يدويًا.

وبما أنني أفترض أنك تريد أن تكون قادرًا على اجتياز استجابات الويب الخاصة بك بتنسيق XML، أقترح عليك البحث في المكتبة مفتوحة المصدر، أتش تي أم أل أجيليتيباك.فهو يسمح لك بإرسال ترميز من موقع ويب (على الأرجح) غير مُصمم بشكل جيد، أو يحتوي على نوع من الترميز غير الصالح، ثم يقوم بإصلاح الأجزاء غير الصالحة بحيث يمكنك اجتيازه مثل XML.

نصائح أخرى

وحين يفعل بعض تجريف الشاشة، وكان لي نفس المشكلة. لقد طلب التطبيق كلاسيكي ASP على ملقم IIS (يمكنني أن أقول من قبل بعض الرؤوس التي الخادم ل reponded مع). وكانت الطريقة التي دعمت جلسة الجارية من خلال تمكين الكوكيز على WebClient. theres لا تبديل لذلك، لديك لفئة فرعية WebClient للحصول على عمل.

    public class CookieAwareWebClient : WebClient
    {
        protected CookieContainer _container = new CookieContainer();

        public CookieContainer Cookies
        {
            get { return _container; }
            set { _container = value; }
        }

        protected override WebRequest GetWebRequest(Uri address)
        {
            HttpWebRequest httpRequest = base.GetWebRequest(address) as HttpWebRequest;      

            if (httpRequest.CookieContainer != null)
            {
                if (httpRequest != null)
                {
                    CookieCollection newCookies = 
                        GetUniqueCookies(
                                address
                                ,httpRequest.CookieContainer.GetCookies(address)
                                );
                    foreach (Cookie c in newCookies)
                        httpRequest.CookieContainer.Add(c);
                }
            }
            else
                httpRequest.CookieContainer = this.Cookies;

            return (WebRequest)httpRequest;
        }

ملحوظة: هذا ليس حلا فريدا، لقد وجدت هذا هناك على شبكة الإنترنت نفسي، ولكني تنفيذ الحل وأنها تعمل بشكل جيد حقا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top