c# - 在 Web 浏览器控件中抓取 Cookie - WP7

标签 c# silverlight windows-phone-7 webbrowser-control

为了登录网站的某个部分,我的应用程序的用户需要他们的 cookie。为此,我需要获取它并将其传递给 url。

有谁知道如何从浏览器控件中获取某个网站的 cookie?

我看到了this method但不是很清楚。

谢谢,TP。

最佳答案

从 WP 7.1 Mango“发布”开始,如果有人可以调用它,请参阅 WebBrowser Control Overview for Windows Phone .它最近更新了一点,事实证明他们实际上已经添加了一些对从 WebBrowser 检索 cookie 的支持。在页面底部,您会发现一个小链接 GetCookies(WebBrowser)指向新类的描述:WebBrowserExtensions用这个非常方便的方法。是的,这个类(class)只有一个成员。这是一种扩展方法,我想对此不需要任何解释。

我没怎么玩过这个方法,但似乎这将允许您访问与 JS 技巧完全相同的东西:当前 URL 的 cookieset。它可能不允许设置任何内容,也不允许查看其他 URL 的 cookie。也许如果你努力使用 CookieContainer 你会收到,但我怀疑。

在 7.0 版本中,我一直在努力为我的应用程序实现“cookie 透明度”。长话短说,我的应用程序正在执行一些后台 HTTP 请求,并且还有一个 WebBrowser 来显示一些在线内容——如果两个连接源都向服务器发出相同的 cookie,“那就太好了”。你猜怎么着,我的应用程序必须发出第一个请求,然后让浏览器导航。有了这样的要求,实际上就没有办法实现 cookie 的一致性 - 呸,即使使用当前新的和出色的 GetCookie 方法,我想这也很难。所以,说到点子上——这是可能的,但需要使用一些隐藏的 API,这些 API 公开存在于手机上,但隐藏在 SDK 中。 API 可在(公共(public))类 System.Net.Browser.WebRequestCreator 中免费获得。怪癖是:在 SDK 中,此类有一个公共(public)静态属性“IWebRequestCreate ClientHttp”和一个方法“Create”,您可以使用它来“工厂化”您的“原始 http”连接 - 如果您不想将 WebClient 用于一些原因。在手机和模拟器上,有一个名为 "IWebRequestCreate BrowserHttp"第二个公共(public)静态属性,很容易通过反射返回:

PropertyInfo brwhttp = typeof(System.Net.Browser.WebRequestCreator)
    .GetProperty("BrowserHttp")

使用此属性,您将能够获得 WebBrowser 内部使用的 IWebRequestCreate 的“特殊”内部实例。通过使用此类打开后台 HTTP 请求,您将让您的 cookie 自动设置为它们是由 WebBrowser 控件创建/发送的,但反过来 - 您将无法修改 http headers,userprovide http user authentication 并且都不做一些低级的事情 - 因为所有这些设置都将与为当前“系统用户实例”存储的 WebBrowser 数据同步,如果我被允许这样调用它的话单用户电话设备嘿。连接和 WebBrowser 之间的互操作双向 - 如果您的 HTTP 连接(使用“隐藏属性”创建)接收到任何设置/cookies/等 - 那么 WebBrowser 将立即注意到它们并且更新自己的缓存。双方都没有 cookie/session 丢失!

如果您需要在第一次 WebBrowser 导航后为您的后续 连接被动获取 cookie - 请使用 GetCookie 或 JS 方式。 但是,如果您需要首先使用您的代码,然后将 authz 传递给 WebBrowser——您可能需要更深入地挖掘并使用上面的代码。它已被隐藏,所以请先使用其他方法!

..不要问我是怎么找到它的或者花了多少时间:P 玩得开心

//编辑:我刚刚发现,BrowserHttp 属性是 Silverlight 访问浏览器连接工厂的正常方式,请参阅 BrowserHttp .好像只是一直隐藏在为WP7平台写的'miniSilverlight'中!

关于c# - 在 Web 浏览器控件中抓取 Cookie - WP7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4212713/

相关文章:

windows-phone-7 - 获取 Windows Phone 7 唯一标识符的正确方法是什么?

c# - 从 .NET 客户端调用 Web API (C#)

c# - 如何在 wcf-service 中设置默认的 faultcontract 属性

c# - 在 C# 中使用 SmtpClient 发送电子邮件时出现问题

silverlight - Silverlight和M-V-VM-计时器应该放在哪里?

c# - 由于 : Unable to load one or more of the requested types. 导致无法导出检索 LoaderExceptions 属性以获取更多信息。

c# - QuickFix C# 或 Python

silverlight - 用于 silverlight 的内存分析器

file - 解决LocalFileSystemURI错误代码5 Windows Phone 7 PhoneGap

windows-phone-7 - 如何在 Windows Phone 上最好地调试无网络连接