欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Linux獲取網(wǎng)頁源碼的幾種方法 - 遺世之都 - ITe

系統(tǒng) 2142 0

Linux獲取網(wǎng)頁源碼的幾種方法 - 遺世之都 - ITeye技術(shù)網(wǎng)站

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





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


C++代碼 ?
  1. //通過Wget來獲取網(wǎng)頁 ??
  2. string?GetHtmlByWget(string?url)??
  3. {??
  4. ???? //獲取待下載網(wǎng)頁文件名 ??
  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());? //執(zhí)行wget ??
  11. ??
  12. ????????ifstream?fin(fileName.c_str());??
  13. ???????? if (!fin)??
  14. ????????{??
  15. ???????????? return ? "" ;??
  16. ????????}??
  17. ????????string?strHtml?=? "" ;??
  18. ???????? char ?chTemp[1024]?=? "" ;??
  19. ???????? //讀取網(wǎng)頁文件到內(nèi)存中 ??
  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;? //返回網(wǎng)頁源碼 ??
  30. ????}??
  31. ???? else ??
  32. ????{??
  33. ???????? return ? "" ;??
  34. ????}??
  35. }??




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


C++代碼 ?
  1. //通過GET獲取網(wǎng)頁源碼 ??
  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. ???? //將端口轉(zhuǎn)換為字符串 ??
  16. ???? char ?t[6];??
  17. ????string??strPort;??
  18. ????sprintf(t, "%d" ,?urlInfo.Port);??
  19. ????strPort?=?t;??
  20. ???? //構(gòu)造發(fā)送字符串 ??
  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方式發(fā)送 ??
  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. ???? //發(fā)送 ??
  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. ???? //關(guān)閉socket ??
  54. ????close(sockfd);??
  55. ???? //返回接受結(jié)果 ??
  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獲取網(wǎng)頁源碼的幾種方法 - 遺世之都 - ITeye技術(shù)網(wǎng)站


更多文章、技術(shù)交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产日韩精品久久 | 日韩视频高清 | 99久久精品免费 | 九九久久精品这里久久网 | 欧洲中文字幕 | 黄色一级大片在线免费看产 | 精品欧美乱码久久久久久 | 日本在线观看视频网站 | 激情综合欧美 | feise.av| 国产高清视频在线 | 一级免费视频 | 欧美精品一区二区蜜臀亚洲 | 色天天天天综合男人的天堂 | 国产精品久久久久久久网站 | 精品久久一区 | 欧美日韩在线一区二区三区 | 免费毛片看 | 日本高清在线观看视频 | 888奇米影视 | 欧美日韩图区 | 激情小说色 | 国产一区二区在线看 | 午夜免费 | 91中文在线观看 | 尤物视频在线观看 | 日韩在线你懂的 | 久久香蕉综合精品国产 | 国产精品综合色区小说 | 国产精品视频免费 | 日本午夜大片免费观看视频 | 噜噜噜天天躁狠狠躁夜夜精品 | 国产一区 | 国产午夜永久福利视频在线观看 | 九九九热在线精品免费全部 | 婷婷在线视频 | 成人av观看| 日韩不卡在线 | 精品亚洲永久免费精品 | 国产在线精品二区韩国演艺界 | 欧美日本国产 |