سؤال

هل هناك طريقة لقراءة/كتابة ملفات تعريف الارتباط التي يستخدمها WebBrowser؟

أنا أفعل شيئًا كهذا ...

string resultHtml;
HttpWebRequest request = CreateMyHttpWebRequest(); // fills http headers and stuff
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
    resultHtml = sr.ReadToEnd();
}
WebBrowser browser = new WebBrowser();
browser.CookieContainer = request.CookieContainer; // i wish i could do this :(
browser.NavigateToString(resultHtml);  
هل كانت مفيدة؟

المحلول

يستخدم WebBrowser Control WinInet للشبكات ، وتحديداً استخدام وظائف InternetSetCookie (EX) و InternetGetCookie (EX) لإدارة ملفات تعريف الارتباط. لا يوجد غلاف Wininet في .NET ، ولكن يمكنك p-infoke.

نصائح أخرى

واحدة من الأشياء التي يحتمل إرباكها حول WebBrowser السيطرة وملفات تعريف الارتباط هي أنه في النظرة الأولى ، غالبًا تبدو مثل تطبيقك يحصل على متجر ملفات تعريف الارتباط منفصل. على سبيل المثال ، إذا قمت بتسجيل الدخول إلى موقع يقوم بتخزين ملف تعريف ارتباط مستمر لتحديد هويتك ، فما إذا كان يبدو أنك قمت بتسجيل الدخول لهذا الموقع من داخل تطبيق يستضيف عنصر التحكم ، فسيكون مستقلاً عما إذا كنت قد قمت بتسجيل الدخول عبر Internet Explorer .

في الواقع ، يمكنك حتى تسجيل الدخول بهويات مختلفة.

ومع ذلك ، على الرغم من أنه قد يكون من الطبيعي استنتاج أن كل تطبيق يستضيف WebBrowser لذلك تحصل على ملفات تعريف الارتباط الخاصة بها ، في الواقع هذا ليس صحيحًا. هناك مجرد مجموعتين من ملفات تعريف الارتباط: تلك المستخدمة في وضع "النزاهة المنخفضة" (وهو ما يتم تشغيله بشكل افتراضي) ، والمجموعة الأخرى ، وهو ما ستحصل عليه في تطبيق عادي يستضيف WebBrowser وأيضًا ما ستحصل عليه إذا قمت بتشغيل IE مرتفعة.

نعم أنت على حق ، InternetGetCookieex هي الطريقة الوحيدة لاسترداد ملفات تعريف الارتباط httponly وهي الطريقة المفضلة للاستيلاء على ملفات تعريف الارتباط من WebBrowser Control.

لقد نشرت أ مثال كامل هنا

يمكنك استخدام application.getCookie و application.setCookie أساليب.

على الرغم من أن التطبيق مرتبط بشكل أو بآخر بـ WPF ، يمكنك استخدام هذه الطرق في أي رمز .NET لسطح المكتب. في الواقع ، فهي مغلفة على InternetGetCookieex و internetsetcookieex واجهات برمجة التطبيقات Windows.

واجهت نفس القضية قبل أيام قليلة. إلى جانب أمثلة الإجابات السابقة ، إليك مجموعة Win32 للتحكم في WebBrowser. تتمثل ميزة هذا التنفيذ في أنه يكشف المزيد من الخيارات التي يتحكم فيها WebBrowser الافتراضي.

لسوء الحظ ، إذا لم يكن الأمر مواطنًا لـ WPF ، فسيتعين عليك إنشاء غلاف إذا كنت تخطط لاستخدامه في WPF.

http://code.google.com/p/csexwb2/

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