获取webbrowser cookie登录

Jaa*_*nus 8 .net c# cookies webbrowser-control

我正在创建一个Windows窗体应用程序,我有一个webbrowser control.

在用户登录后webbrowser,我想也登录与同一帐户Microsoft.Http.HttpClientHttpWebRequest或类似的,它应该是类似cURLPHP.

问题是网页只允许每个帐户进行单点登录,如果我使用HttpClient签名,它会将webbrowser踢出去.

我想知道的,如果有可能劫持webbrowser会话或者cookies在我HttpClient或类似的地方使用它api.

我可以webbrowser.Cookie用来获取一些数据,但是如何将其推送到HttpClient

这样的事情是否可能,我可以拿走cookie并使用相同的会话?如果是这样,怎么样?

Jaa*_*nus 16

从这里获得帮助:

是否可以将身份验证从Webbrowser转移到WebRequest

Alkampfer发布了解决方案.这正是我所需要的,也是有效的.

此解决方案还需要Http onlycookie.

您可以调用GetUriCookieContainer方法,该方法返回一个CookieContainer,该方法可用于随后使用WebRequest对象进行调用.

[DllImport("wininet.dll", SetLastError = true)]
    public static extern bool InternetGetCookieEx(
        string url, 
        string cookieName, 
        StringBuilder cookieData, 
        ref int size,
        Int32  dwFlags,
        IntPtr  lpReserved);

    private const Int32 InternetCookieHttponly = 0x2000;

/// <summary>
/// Gets the URI cookie container.
/// </summary>
/// <param name="uri">The URI.</param>
/// <returns></returns>
public static CookieContainer GetUriCookieContainer(Uri uri)
{
    CookieContainer cookies = null;
    // Determine the size of the cookie
    int datasize = 8192 * 16;
    StringBuilder cookieData = new StringBuilder(datasize);
    if (!InternetGetCookieEx(uri.ToString(), null, cookieData, ref datasize, InternetCookieHttponly, IntPtr.Zero))
    {
        if (datasize < 0)
            return null;
        // Allocate stringbuilder large enough to hold the cookie
        cookieData = new StringBuilder(datasize);
        if (!InternetGetCookieEx(
            uri.ToString(),
            null, cookieData, 
            ref datasize, 
            InternetCookieHttponly, 
            IntPtr.Zero))
            return null;
    }
    if (cookieData.Length > 0)
    {
        cookies = new CookieContainer();
        cookies.SetCookies(uri, cookieData.ToString().Replace(';', ','));
    }
    return cookies;
}
Run Code Online (Sandbox Code Playgroud)