コード例 #1
0
ファイル: LoginDlg.cpp プロジェクト: dariner/TiebaManager
HRESULT CLoginDlg::GetCookie(CString& cookie)
{
	DWORD size;
	InternetGetCookieEx(_T("http://tieba.baidu.com/"), _T("BDUSS"), NULL,
		&size, INTERNET_COOKIE_HTTPONLY, NULL); // size为字节数
	BOOL result = InternetGetCookieEx(_T("http://tieba.baidu.com/"), _T("BDUSS"), cookie.GetBuffer(size),
		&size, INTERNET_COOKIE_HTTPONLY, NULL); // BUG:size在XP下单位是字节,在win10是字符数,XP下传字符数会返回缓冲不够
	HRESULT hr = HRESULT_FROM_WIN32(GetLastError());
	cookie.ReleaseBuffer();

	if (result)
	{
		if (cookie.GetLength() < 100 || !StringIncludes(cookie, _T("BDUSS=")))
			return HRESULT_FROM_WIN32(ERROR_INVALID_DATA); // 无效的Cookie
		cookie += _T(";");
		return S_OK; // 成功
	}
	return hr;
}
コード例 #2
0
ファイル: LoginDlg.cpp プロジェクト: CHNhawk/TiebaManager
// 使用IE Cookie
void CLoginDlg::OnBnClickedButton3()
{
	DWORD size = 1024 * 1024;
	BOOL result = InternetGetCookieEx(_T("http://tieba.baidu.com/"), NULL, m_cookie.GetBuffer(size),
		&size, INTERNET_COOKIE_HTTPONLY, NULL);
	m_cookie.ReleaseBuffer();

	BOOL jump = TRUE;
CheckResult:
	if (!result)
	{
		if (jump)
			goto Win10;
		AfxMessageBox(_T("获取Cookie失败!"), MB_ICONERROR);
		return;
	}
	if (!StringIncludes(m_cookie, _T("BDUSS=")))
	{
		if (jump)
			goto Win10;
		AfxMessageBox(_T("请先在IE浏览器登陆百度账号并选中下次自动登录!"), MB_ICONERROR);
		return;
	}

	GetLoginUserName();
	if (m_userName == _T(""))
	{
		AfxMessageBox(_T("获取用户名失败!"), MB_ICONERROR);
		return;
	}

	AfxMessageBox(_T("登录完毕,不要在IE退出账号以免cookie失效,可以直接清除cookie"), MB_ICONINFORMATION);
	EndDialog(IDOK);
	return;

Win10:
	size = 1024 * 1024;
	result = SUCCEEDED(IEGetProtectedModeCookie(L"http://tieba.baidu.com/", NULL, m_cookie.GetBuffer(size),
		&size, INTERNET_COOKIE_HTTPONLY));
	jump = FALSE;
	goto CheckResult;
}
コード例 #3
0
ファイル: HippoPlatformImpl.cpp プロジェクト: nihed/magnetism
static gboolean
read_ie_login_cookie(const char       *web_host,
                     char            **username_p,
                     char            **password_p)
{
    WCHAR staticBuffer[1024];
    WCHAR *allocBuffer = NULL;
    WCHAR *cookieBuffer = staticBuffer;
    DWORD cookieSize = sizeof(staticBuffer) / sizeof(staticBuffer[0]);
    char *cookie = NULL;
    HippoBSTR authUrl;

    *username_p = NULL;
    *password_p = NULL;
    
    makeAuthUrl(web_host, &authUrl);

retry:
    *cookieBuffer = 0;
    if (!InternetGetCookieEx(authUrl, 
                             L"auth",
                             cookieBuffer, &cookieSize,
                             0,
                             NULL))
    {
        HRESULT error = GetLastError();
        if (error == ERROR_INSUFFICIENT_BUFFER) {
            cookieBuffer = allocBuffer = new WCHAR[cookieSize];
            if (!cookieBuffer)
                goto out;
            goto retry;
        } else {
            hippoDebugLogW(L"Failed to get auth cookie %d", (int) error);
            cookieSize = 0;
        }
    }

    WCHAR *p = cookieBuffer;
    WCHAR *nextCookie = NULL;
    for (WCHAR *p = cookieBuffer; p < cookieBuffer + cookieSize; p = nextCookie + 1) {
        HippoBSTR host;
        HippoBSTR username;
        HippoBSTR password;

        nextCookie = wcschr(p, ';');
        if (!nextCookie)
            nextCookie = cookieBuffer + cookieSize;

        while (*p == ' ' || *p == '\t') // Skip whitespace after ;
            p++;

        if (!startsWith(p, L"auth="))
            continue;

        p += 5; // Skip 'auth='

        HippoUStr cookieValue(p, (int) (nextCookie - p));
    
        if (hippo_parse_login_cookie(cookieValue.c_str(), web_host, username_p, password_p)) {
            //hippoDebugLogU("using cookie '%s'", cookieValue.c_str());
            break;
        }

        //hippoDebugLogU("skipping cookie '%s'", cookieValue.c_str());
    }

out:
    delete[] allocBuffer;

    return (*username_p && *password_p);
}