亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Linux獲取網頁源碼的幾種方法 - 遺世之都 - ITe

系統 2054 0

Linux獲取網頁源碼的幾種方法 - 遺世之都 - ITeye技術網站

JavaEye博客還是本科做畢業設計時候開通的,基本上荒廢了,現在決定記錄下平時編程遇到的問題或者解決方案。





第一個為利用linux下的工具來獲取網頁源碼,我用的是Wget,也可以使用Curl,curl的話更加的靈活,可以設置很多參數


C++代碼 ?
  1. //通過Wget來獲取網頁 ??
  2. string?GetHtmlByWget(string?url)??
  3. {??
  4. ???? //獲取待下載網頁文件名 ??
  5. ????string?fileName?=?url.substr(( int )url.find_last_of( "/" )?+?1);??
  6. ???? if (fileName?!=? "" )??
  7. ????{??
  8. ????????string?strCom?=? "wget?-q?" ;? //wget命令,-q表示不顯示下載信息 ??
  9. ????????strCom.append(url);??
  10. ????????system(strCom.c_str());? //執行wget ??
  11. ??
  12. ????????ifstream?fin(fileName.c_str());??
  13. ???????? if (!fin)??
  14. ????????{??
  15. ???????????? return ? "" ;??
  16. ????????}??
  17. ????????string?strHtml?=? "" ;??
  18. ???????? char ?chTemp[1024]?=? "" ;??
  19. ???????? //讀取網頁文件到內存中 ??
  20. ???????? while (fin.getline(chTemp?,?1024))??
  21. ????????{??
  22. ????????????strHtml.append(string(chTemp));??
  23. ????????????strcpy(chTemp?,? "" );??
  24. ????????}??
  25. ????????fin.close();??
  26. ????????strCom?=? "rm?-f?" ;?? //刪除文件命令,-f表示直接刪除不做任何提示 ??
  27. ????????strCom.append(fileName);??
  28. ????????system(strCom.c_str());? //刪除剛才下載下來的文件 ??
  29. ???????? return ?strHtml;? //返回網頁源碼 ??
  30. ????}??
  31. ???? else ??
  32. ????{??
  33. ???????? return ? "" ;??
  34. ????}??
  35. }??




第二個是用的socket的來獲取源碼


C++代碼 ?
  1. //通過GET獲取網頁源碼 ??
  2. string?GetHtmlByGet(string?url)??
  3. {??
  4. ????string?strHtmlContent?=? "" ;??
  5. ???? int ?sockfd;??
  6. ???? struct ?sockaddr_in?addr;??
  7. ???? struct ?hostent?*pURL;??
  8. ???? char ?text[RECVBUF];??
  9. ??
  10. ???? //分析鏈接 ??
  11. ????UrlInfo?urlInfo?=?ParseURL(url);??
  12. ????string?sAccept?=? "Accept:?*/*\r\nAccept-Language:?zh-cn\r\nAccept-Encoding:?gzip,?deflate" ;??
  13. ???? //不同的主機UserAgent不同 ??
  14. ????string?sUserAgent?=? "Mozilla/5.0?(X11;?U;?Linux?i686;?en-US)?AppleWebKit/534.10?(KHTML,?like?Gecko)?Chrome/8.0.552.224?Safari/534.10" ;??
  15. ???? //將端口轉換為字符串 ??
  16. ???? char ?t[6];??
  17. ????string??strPort;??
  18. ????sprintf(t, "%d" ,?urlInfo.Port);??
  19. ????strPort?=?t;??
  20. ???? //構造發送字符串 ??
  21. ????string?strRequest?=? "" ;??
  22. ????strRequest.append( "GET?" );??
  23. ????strRequest.append(urlInfo.File);??
  24. ????strRequest.append( "?" );??
  25. ????strRequest.append(urlInfo.Body);??
  26. ????strRequest.append( "?HTTP/1.1\r\n" );??
  27. ????strRequest.append(sAccept);??
  28. ????strRequest.append( "\r\nUser-Agent:" );??
  29. ????strRequest.append(sUserAgent);??
  30. ????strRequest.append( "\r\nHost:" );??
  31. ????strRequest.append(urlInfo.Host);??
  32. ????strRequest.append( ":" );??
  33. ????strRequest.append(strPort);??
  34. ????strRequest.append( "\r\nConnection:?Keep-Alive\r\n\r\n" );??
  35. ??
  36. ???? char *?host?=? const_cast < char *>(urlInfo.Host.c_str());??
  37. ????sockfd?=?socket(AF_INET,?SOCK_STREAM,?IPPROTO_TCP);? //TCP方式發送 ??
  38. ????pURL?=?gethostbyname(host);??
  39. ????addr.sin_family?=?AF_INET;??
  40. ????addr.sin_addr.s_addr?=?*((unsigned? long *)pURL->h_addr);??
  41. ????addr.sin_port?=?htons(80);??
  42. ??
  43. ???? //連接 ??
  44. ????connect(sockfd,( struct ?sockaddr?*)&addr, sizeof (addr));??
  45. ???? //發送 ??
  46. ????send(sockfd,? const_cast < char *>(strRequest.c_str()),?strRequest.length(),?0);??
  47. ???? //接受 ??
  48. ???? while (recv(sockfd,?text,?RECVBUF,?0)?>?0)??
  49. ????{??
  50. ????????strHtmlContent.append(text);??
  51. ????????bzero(text,RECVBUF);??
  52. ????}??
  53. ???? //關閉socket ??
  54. ????close(sockfd);??
  55. ???? //返回接受結果 ??
  56. ???? return ?strHtmlContent;??
  57. }??






使用libcurl


Java代碼 ?
  1. #include?<stdio.h>???
  2. ?#include?<string.h>???
  3. ?#include?<curl/curl.h>???
  4. ??
  5. ?#define?MAX_BUF????? 65536 ???
  6. ??
  7. ? char ?wr_buf[MAX_BUF+ 1 ];???
  8. ? int ??wr_index;???
  9. ??
  10. ? /*? ?
  11. ?*?Write?data?callback?function?(called?within?the?context?of? ?
  12. ?*?curl_easy_perform.? ?
  13. ?*/ ???
  14. ?size_t?write_data(? void ?*buffer,?size_t?size,?size_t?nmemb,? void ?*userp?)???
  15. ?{???
  16. ?? int ?segsize?=?size?*?nmemb;???
  17. ??
  18. ?? /*?Check?to?see?if?this?data?exceeds?the?size?of?our?buffer.?If?so,? ?
  19. ???*?set?the?user-defined?context?value?and?return?0?to?indicate?a? ?
  20. ???*?problem?to?curl.? ?
  21. ???*/ ???
  22. ?? if ?(?wr_index?+?segsize?>?MAX_BUF?)?{???
  23. ????*( int ?*)userp?=? 1 ;???
  24. ???? return ? 0 ;???
  25. ??}???
  26. ??
  27. ?? /*?Copy?the?data?from?the?curl?buffer?into?our?buffer?*/ ???
  28. ??memcpy(?( void ?*)&wr_buf[wr_index],?buffer,?(size_t)segsize?);???
  29. ??
  30. ?? /*?Update?the?write?index?*/ ???
  31. ??wr_index?+=?segsize;???
  32. ??
  33. ?? /*?Null?terminate?the?buffer?*/ ???
  34. ??wr_buf[wr_index]?=? 0 ;???
  35. ??
  36. ?? /*?Return?the?number?of?bytes?received,?indicating?to?curl?that?all?is?okay?*/ ???
  37. ?? return ?segsize;???
  38. ?}???
  39. ??
  40. ??
  41. ? /*? ?
  42. ?*?Simple?curl?application?to?read?the?index.html?file?from?a?Web?site.? ?
  43. ?*/ ???
  44. ? int ?main(? void ?)???
  45. ?{???
  46. ??CURL?*curl;???
  47. ??CURLcode?ret;???
  48. ?? int ??wr_error;???
  49. ??
  50. ??wr_error?=? 0 ;???
  51. ??wr_index?=? 0 ;???
  52. ??
  53. ?? /*?First?step,?init?curl?*/ ???
  54. ??curl?=?curl_easy_init();???
  55. ?? if ?(!curl)?{???
  56. ????printf( "couldn't?init?curl\n" );???
  57. ???? return ? 0 ;???
  58. ??}???
  59. ??
  60. ?? /*?Tell?curl?the?URL?of?the?file?we're?going?to?retrieve?*/ ???
  61. ??curl_easy_setopt(?curl,?CURLOPT_URL,? "www.exampledomain.com" ?);???
  62. ??
  63. ?? /*?Tell?curl?that?we'll?receive?data?to?the?function?write_data,?and? ?
  64. ???*?also?provide?it?with?a?context?pointer?for?our?error?return.? ?
  65. ???*/ ???
  66. ??curl_easy_setopt(?curl,?CURLOPT_WRITEDATA,?( void ?*)&wr_error?);???
  67. ??curl_easy_setopt(?curl,?CURLOPT_WRITEFUNCTION,?write_data?);???
  68. ??
  69. ?? /*?Allow?curl?to?perform?the?action?*/ ???
  70. ??ret?=?curl_easy_perform(?curl?);???
  71. ??
  72. ??printf(? "ret?=?%d?(write_error?=?%d)\n" ,?ret,?wr_error?);???
  73. ??
  74. ?? /*?Emit?the?page?if?curl?indicates?that?no?errors?occurred?*/ ???
  75. ?? if ?(?ret?==? 0 ?)?printf(? "%s\n" ,?wr_buf?);???
  76. ??
  77. ??curl_easy_cleanup(?curl?);???
  78. ??
  79. ?? return ? 0 ;???
  80. ?}???

Linux獲取網頁源碼的幾種方法 - 遺世之都 - ITeye技術網站


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美日韩一本 | 国产成在线观看免费视频成本人 | 日本福利片国产午夜久久 | 中文线码中文高清播放中 | 久久精品国产精品青草 | 在线 色 | 麻豆狠色伊人亚洲综合网站 | 国产福利视频一区二区三区四区 | 女色综合| 天堂毛片| 在线亚洲 欧美 日本专区 | 新久草 | 国产精品福利久久香蕉中文 | 日韩视频免费一区二区三区 | 四虎午夜剧场 | 伊人婷婷色 | 四虎免费在线观看视频 | 伊人色婷婷综在合线亚洲 | 婷婷国产成人久久精品激情 | 香蕉久久一区二区三区 | 亚洲一区二区三区四区 | 免费一级特黄特色黄大任片 | 色视频在线看 | 国产亚洲一区二区麻豆 | 国产护士一级毛片高清 | 久热精品视频在线 | 欧美性色欧美a在线观看 | 亚洲国产精久久久久久久春色 | 一级做a爱片特黄在线观看免费看 | 中文字幕在线观看第二页 | 午夜性色福利视频在线视频 | 久草美女视频 | 亚洲一级在线观看 | 国产精品久久久久久久久福利 | 色综合中文 | 色综合色综合色综合 | 狠狠色噜噜噜噜狠狠狠狠狠狠奇米 | 四虎福利 | youjizz欧美粗又大中国 | 欧美成人免费一区在线播放 | 日韩在线 | 中文 |