2011-02-11 45 views
2

嘿所有我想登錄到我的作品與WinInet的網頁,這是我當前的代碼:C++ wininet,連接到weblogin,如何設置cookie?

int main() 
{ 
    HINTERNET hInet = InternetOpenA("UserAgent/1.0", INTERNET_OPEN_TYPE_PRECONFIG,0, 0, 0); 
    if(!hInet) 
    { 
     printf("hInet Failed!\n"); 
     return -1; 
    } 

    HINTERNET hConnection = InternetConnectA(hInet,"app.tamigo.com",INTERNET_DEFAULT_HTTPS_PORT,"","", INTERNET_SERVICE_HTTP,0,0); 
    if (!hConnection) 
    { 
     InternetCloseHandle(hInet); 
     printf("InternetConnectA failed!\n"); 
     return -1; 
    } 

    HINTERNET hRequest = HttpOpenRequestA(hConnection, "Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",NULL,"https://app.tamigo.com/Home/Pages/Login.aspx", NULL, INTERNET_FLAG_KEEP_CONNECTION, 0); 
    if (!hRequest) 
    { 
     printf("BuildRequestHeader failed %d!\n",GetLastError()); 
     InternetCloseHandle(hConnection); 
     InternetCloseHandle(hInet); 
     return -1; 
    } 

    HttpSendRequestA(hRequest, NULL, 0, NULL, 0); 

    DWORD dwInfoLevel = HTTP_QUERY_RAW_HEADERS_CRLF; 
    DWORD dwInfoBufferLength = 10; 
    BYTE *pInfoBuffer = (BYTE *)malloc(dwInfoBufferLength+1); 
    while (!HttpQueryInfo(hRequest, dwInfoLevel, pInfoBuffer, &dwInfoBufferLength, NULL)) 
    { 
     DWORD dwError = GetLastError(); 
     if (dwError == ERROR_INSUFFICIENT_BUFFER) 
     { 
      free(pInfoBuffer); 
      pInfoBuffer = (BYTE *)malloc(dwInfoBufferLength+1); 
     } 
     else 
     { 
      fprintf(stderr, "HttpQueryInfo failed, error = %d (0x%x)\n", 
      GetLastError(), GetLastError()); 
      break; 
     } 
    } 
    pInfoBuffer[dwInfoBufferLength] = '\0'; 
    printf("%s", pInfoBuffer); 
    free(pInfoBuffer); 

    cin.get(); 
    return 1; 
} 

如果這個代碼是正確的,我有我的用戶名登錄並通過,我使用了一個cookie「 Firefox插件篡改數據「。我怎樣才能用wininet設置這個cookie?

非常感謝閱讀和您的時間

+0

正如順便說一句,如果你使用的是C++,沒有理由使用malloc和free。使用新的和刪除操作符。此外,在這種情況下,您根本不需要分配堆。在堆棧上創建緩衝區並將地址傳遞給HTTPQueryInfo。 – ThomasMcLeod 2011-02-11 19:17:36

回答

1

如果cookie已經從以前的WinInet請求存在,那麼WinInet的將自動發送。但是,如果Cookie不存在於WinInet的Cookie緩存中(例如,如果您從其他來源獲得cookie),則在致電HttpSendRequest()之前,您必須使用HttpAddRequestHeaders()來提供您自己的Cookie:請求標頭。

0

只是添加到雷米Lebeau的答案(因爲我沒有足夠的聲譽評論)。

如果您不指定INTERNET_FLAG_NO_COOKIES標誌爲HttpOpenRequest,HttpAddRequestHeaders將忽略您設置「Cookie」標頭的請求。請注意,這是禁用wininet的自動cookie管理,所以你需要照顧所有的cookie管理。

下面是詳細信息(和另一種方式來做到這一點): https://groups.google.com/forum/#!topic/microsoft.public.inetsdk.programming.wininet/0O1hkyPCF-I