إدارة ملفات تعريف الارتباط في WPF WebBrowser Control؟
-
21-09-2019 - |
سؤال
هل هناك طريقة لقراءة/كتابة ملفات تعريف الارتباط التي يستخدمها 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.