程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> VC使用libcurl模擬登錄CSDN並自動評論資源以獲取積分

VC使用libcurl模擬登錄CSDN並自動評論資源以獲取積分

編輯:C++入門知識

環境:Win7 64位+VC2008

軟件及源碼下載:(由於上傳的資源被刪除,需要的留下郵箱)

涉及到的知識點:

C++多線程編程

libcurl的使用(包括發送http請求、發送cookie給服務器、保存cookie)

關於libcurl的資料,推薦大家參考下官方文檔:http://curl.haxx.se/libcurl/c/example.html

軟件運行結果

libcurl中的所有函數

curl_easy_cleanup 

curl_easy_duphandle 
curl_easy_escape 
curl_easy_getinfo 
curl_easy_init 
curl_easy_pause 
curl_easy_perform 
curl_easy_recv 
curl_easy_reset 
curl_easy_send 
curl_easy_setopt 
curl_easy_strerror 
curl_easy_unescape 
curl_escape (deprecated, do not use
curl_formadd 
curl_formfree 
curl_formget 
curl_free 
curl_getdate 
curl_getenv (deprecated, do not use
curl_global_cleanup 
curl_global_init 
curl_global_init_mem 
curl_mprintf (deprecated, do not use
curl_multi_add_handle 
curl_multi_assign 
curl_multi_cleanup 
curl_multi_fdset 
curl_multi_info_read 
curl_multi_init 
curl_multi_perform 
curl_multi_remove_handle 
curl_multi_setopt 
curl_multi_socket 
curl_multi_socket_action 
curl_multi_strerror 
curl_multi_timeout 
curl_share_cleanup 
curl_share_init 
curl_share_setopt 
curl_share_strerror 
curl_slist_append 
curl_slist_free_all 
curl_strequal (deprecated, do not use
curl_strnequal (deprecated, do not use
curl_unescape (deprecated, do not use
curl_version 
curl_version_info

  以下幾個函數需要重點掌握 curl_easy_init 
curl_easy_cleanup  curl_easy_getinfo 
curl_easy_perform 
curl_easy_setopt 
curl_global_cleanup 
curl_version 
CURLcode curl_global_init(long flags)
描述:這個函數只能用一次。(其實在調用curl_global_cleanup 函數後仍然可再用)
如果這個函數在curl_easy_init函數調用時還沒調用,它將由libcurl庫自動完成。
參數:flags
CURL_GLOBAL_ALL           //初始化所有的可能的調用。
CURL_GLOBAL_SSL           //初始化支持 安全套接字層。
CURL_GLOBAL_WIN32         //初始化win32套接字庫。
CURL_GLOBAL_NOTHING     //沒有額外的初始化。   void curl_global_cleanup(void);
描述:在結束libcurl使用的時候,用來對curl_global_init做的工作清理。類似於close的函數。  

char *curl_version( );

描述: 打印當前libcurl庫的版本   CURL *curl_easy_init( ); 描述:curl_easy_init用來初始化一個CURL的指針(有些像返回FILE類型的指針一樣). 相應的在調用結束時要用curl_easy_cleanup函數清理.
一般curl_easy_init意味著一個會話的開始. 它的返回值一般都用在easy系列的函數中   void curl_easy_cleanup(CURL *handle); 描述:這個調用用來結束一個會話.與curl_easy_init配合著用. 
參數:CURL類型的指針.   CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter);
描述: 這個函數最重要了.幾乎所有的curl 程序都要頻繁的使用它.
它告訴curl庫.程序將有如何的行為. 比如要查看一個網頁的html代碼等.
(這個函數有些像ioctl函數)
參數:
1 CURL類型的指針
2 各種CURLoption類型的選項.(都在curl.h庫裡有定義,man 也可以查看到)
3 parameter 這個參數 既可以是個函數的指針,也可以是某個對象的指針,也可以是個long型的變量.它用什麼這取決於第二個參數.
CURLoption 這個參數的取值很多.具體的可以查看man手冊.   CURLcode curl_easy_perform(CURL *handle); 描述:這個函數在初始化CURL類型的指針 以及curl_easy_setopt完成後調用. 就像字面的意思所說perform就像是個舞台.讓我們設置的
option 運作起來.
參數:
CURL類型的指針 

 

如何操作cookie

通過curl_easy_setopt函數的第二個參數,就可以很容易的操作cookie 保存cookie信息到本地的cookie.txt文件
curl_easy_setopt(curl, CURLOPT_COOKIEJAR, );

讀取本地的cookie.txt文件中的cookie信息

curl_easy_setopt(easy_handle, CURLOPT_COOKIEFILE, "cookie.txt");

模擬登錄csdn

=* curl_slist *headers ==
        curl_easy_setopt(curl, CURLOPT_COOKIEFILE, 
        headers = curl_slist_append(headers,);    
        headers = curl_slist_append(headers,= curl_slist_append(headers,= curl_slist_append(headers,= curl_slist_append(headers,= curl_slist_append(headers,= curl_slist_append(headers,= curl_slist_append(headers,);        
 url[
        res == curl_easy_setopt(curl, CURLOPT_WRITEDATA, &
        res =* pos = returnVal.find( ( pos >= = nStartPos = content.find( nEndPos      = content.rfind(= content.substr(nStartPos+,nEndPos - nStartPos- nStartPos = returnVal.find( nEndPos      = returnVal.find(= returnVal.substr(nStartPos+,nEndPos-nStartPos-
=

根據給定的網址獲取網頁源碼

  GetHtmlPage(*=
        curl_easy_setopt(easy_handle, CURLOPT_COOKIEFILE,);            
        curl_easy_setopt(easy_handle,CURLOPT_FOLLOWLOCATION, 
         curl_slist *headers == curl_slist_append(headers,= curl_slist_append(headers,= curl_slist_append(headers,= curl_slist_append(headers,= curl_slist_append(headers,= curl_slist_append(headers,);        

        (!

 *

獲取下載資源總頁數

  url =  html = nPos = html.rfind( (nPos == - --=  nStartPos = html.rfind( strTotal = html.substr(nStartPos+,nPos - nStartPos - 

獲取待評論的資源列表

 vector<DownResourceInfo> GetToCommentList(<DownResourceInfo> url[] = { html = nPos =  n =  flag = ((nPos = html.find(,n)) != -= nPos+ nStartPos = html.rfind( strUrl = html.substr(nStartPos+,nPos - nStartPos -=
        nStartPos = html.find(strUrl,nPos+(nStartPos == -+= += nEndPos = html.find( ResourceName = html.substr(nStartPos,nEndPos -=

發表評論

 BOOL AddComment(*=
        curl_easy_setopt(easy_handle, CURLOPT_COOKIEFILE, url = +sourceId+ referer = +
         curl_slist *headers == curl_slist_append(headers,= curl_slist_append(headers,= curl_slist_append(headers,= curl_slist_append(headers,= curl_slist_append(headers,= curl_slist_append(headers,= curl_slist_append(headers,== curl_slist_append(headers,);        

        (!

 pos = content.find( (pos>=
        

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved