日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

libcurl模拟hi百度登陆

發布時間:2023/12/8 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 libcurl模拟hi百度登陆 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題外話:

????? 話說某大型論壇,每天都有不少網友瞄準00.00發表文章,爭取拿到當天第一簽。某牛某天興致大發,在Linux下,利用crond定時在00:00運行一個shell腳本程序來發表文章,于是日日得到第一簽,引來不少網友羨慕。不必羨慕,看完這篇文章,稍加揣摩,查查資料,你也可以做到了。


一、curl與libcurl介紹


??? 網上關于curl介紹的通常說法是:


???? curl是一個利用URL語法在命令行方式下工作的文件傳輸工具。它支持很多協議:FTP, FTPS, HTTP, HTTPS, GOPHER,TELNET, DICT, FILE 以及 LDAP。curl同樣支持HTTPS認證,HTTP POST方法, HTTP PUT方法, FTP上傳, kerberos認證, HTTP上傳,代理服務器, cookies, 用戶名/密碼認證, 下載文件斷點續傳, 上載文件斷點續傳, http代理服務器管道( proxy tunneling),甚至它還支持IPv6, socks5代理服務器, 通過http代理服務器上傳文件到FTP服務器等等,功能十分強大。Windows操作系統下的網絡螞蟻,網際快車(FlashGet)的功能它都可以做到。準確的說,curl支持文件的上傳和下載,所以是一個綜合傳輸工具,但是按照傳統,用戶習慣稱curl為下載工具。
????
??? curl是使用libcurl實現的,而libcurl提供了各種語言的庫,方便開發者使用,由于我只了解C語言,所以下面例子使用C語言API。

??? 在看下面內容之前,請先看懂這個example:http://curl.haxx.se/lxr/source/docs/examples/simple.c看懂之后再看:http://curl.haxx.se/lxr/source/docs/examples/postit2.c。


二、實例

???? 使用libcurl庫下載hi百度個人私有日志,首先必須用抓包工具抓取hi百度登陸的幾個數據包研究,總結規律,然后用libcurl模擬。
???? 通過對hi百度登陸流程,數據包的觀察,登陸過程大致分為3步:
????? 1)打開https://passport.baidu.com/?login頁面,百度的服務器會在你的頁面寫一個sessionid,sessionid存在cookie中;
????? 2)用戶輸入帳號密碼,點擊登陸,瀏覽器會發送帳號密碼,還有第一步保存的cookie,到https://passport.baidu.com/?login;這里需要特別注意,如果沒有發送第一步保存的cookie,服務器會要你填寫驗證碼,而驗證碼是圖片信息,我們無從獲取,所以第一步保存cookie是必須的。
????? 3)服務器驗證帳號密碼,cookie里面的sessionid,正確則再發送兩個sessionid給瀏覽器,以后瀏覽器獲取頁面都會發送這兩個sessionid回服務器驗證。

????? 了解這些之后,用libcurl c API實現三個小程序來獲取一個被我設置為個人私有的頁面,這三個小程序最好是寫成一個程序來,考慮到為了給初學者一個清晰的思路,用三個小程序對應上面描述的三個步驟,程序代碼見附錄。
????? 看到這里,也許你會說,何必這么麻煩,我用帳號密碼登陸也可以看到自己的私有文章。這里最重要的是演示如何用libcurl模擬網站的登陸過程,登陸之后要做什么就隨便你了。如果你是想搞破壞了,也很簡單,把下面的程序改成灌水機就可以了,不過建議別這么做,小心被封帳號或IP,當然,你可以申請多個帳號,把你的程序做成木馬,用別人的肉機來灌水。但是奉勸一句:出來混早晚要還的,把技術用來"為人民服務"吧!
??????
????? 在結束這篇文章之前,得說明一下,如果你是UNIX類用戶,直接用curl就可以方便實現下面的功能,只要幾條語句,這也就是開篇說的shell程序的內容了。


附錄:

/*************open_login_page.c***********/ #include <stdio.h> #include <string.h> #include <curl/curl.h> #include <curl/types.h> #include <curl/easy.h> int main(int argc, char *argv[]) { CURL *curl; CURLcode res; struct curl_slist *headerlist=NULL; static const char buf[] = "Expect:"; curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); headerlist = curl_slist_append(headerlist, buf); if(curl) {curl_easy_setopt(curl, CURLOPT_URL, "https://passport.baidu.com/?login");curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);curl_easy_setopt(curl, CURLOPT_COOKIEJAR,"cookie_open.txt");//把服務器發過來的cookie保存到cookie_open.txt #ifdef SKIP_PEER_VERIFICATIONcurl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); #endif #ifdef SKIP_HOSTNAME_VERFICATIONcurl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); #endifres = curl_easy_perform(curl);/* always cleanup */curl_easy_cleanup(curl);/* free slist */curl_slist_free_all(headerlist); } return 0; }
/********************login_hi_baidu*****************/ #include <stdio.h> #include <string.h> #include <curl/curl.h> #include <curl/types.h> #include <curl/easy.h> int main(int argc, char *argv[]) { CURL *curl; CURLcode res; struct curl_slist *headerlist=NULL; static const char buf[] = "Expect:"; curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); headerlist = curl_slist_append(headerlist, buf); if(curl) {curl_easy_setopt(curl, CURLOPT_URL, "https://passport.baidu.com/?login");curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);curl_easy_setopt (curl,CURLOPT_POSTFIELDS,"username=s_yqguo&password=&psp_tt=0&safeflg=0&return_method=get&u=http://hi.baidu.com/s% 5Fyqguo");//設置帳號密碼,其余的信息是頁面要求的,抓包即可看見。curl_easy_setopt(curl,CURLOPT_COOKIEFILE,"cookie_open.txt");//提交第一步保存的cookiecurl_easy_setopt(curl,CURLOPT_COOKIEJAR,"cookie_login.txt");//保存登陸后的cookie #ifdef SKIP_PEER_VERIFICATIONcurl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); #endif #ifdef SKIP_HOSTNAME_VERFICATIONcurl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); #endifres = curl_easy_perform(curl);/* always cleanup */curl_easy_cleanup(curl);/* free slist */curl_slist_free_all(headerlist); } return 0; }
/************download_private_page.c******************/ #include <stdio.h> #include <string.h> #include <curl/curl.h> #include <curl/types.h> #include <curl/easy.h> static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream) {int written = fwrite(ptr, size, nmemb, (FILE *)stream);return written; } int main(int argc, char *argv[]) { CURL *curl; CURLcode res; static const char *headerfilename = "head.out"; FILE *headerfile; static const char *bodyfilename = "body.html"; FILE *bodyfile; struct curl_slist *headerlist=NULL; static const char buf[] = "Expect:"; curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); headerlist = curl_slist_append(headerlist, buf); if(curl) {//拉取私有頁面curl_easy_setopt(curl, CURLOPT_URL, "http://hi.baidu.com/s_yqguo/blog/item/c4e99e58d7ec9d86800a18a2.html");curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);headerfile = fopen(headerfilename,"w");if (headerfile == NULL) {curl_easy_cleanup(curl);curl_global_cleanup();curl_slist_free_all(headerlist);printf("open head.out file failed!\n");return -1;}bodyfile = fopen(bodyfilename,"w");if (bodyfile == NULL) {curl_easy_cleanup(curl);curl_global_cleanup();curl_slist_free_all(headerlist);printf("open body.html file failed!\n");return -1;}curl_easy_setopt(curl,CURLOPT_WRITEHEADER, headerfile);curl_easy_setopt(curl,CURLOPT_WRITEDATA,bodyfile);curl_easy_setopt(curl,CURLOPT_COOKIEFILE,"cookie_login.txt");//把第二步保存的cookie發送給服務器驗證 #ifdef SKIP_PEER_VERIFICATIONcurl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); #endif #ifdef SKIP_HOSTNAME_VERFICATIONcurl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); #endifres = curl_easy_perform(curl);/* always cleanup */curl_easy_cleanup(curl);/* free slist */curl_slist_free_all(headerlist);curl_global_cleanup();if(headerfile != NULL)fclose(headerfile);if(bodyfile != NULL)fclose(bodyfile); } return 0; }


總結

以上是生活随笔為你收集整理的libcurl模拟hi百度登陆的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。