最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

linux c++模擬簡(jiǎn)易網(wǎng)絡(luò)爬蟲(chóng)實(shí)例

 更新時(shí)間:2017年06月05日 08:43:44   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇linux c++模擬簡(jiǎn)易網(wǎng)絡(luò)爬蟲(chóng)實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

廢話不多說(shuō),直接上代碼

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/

/* 
* File: main.cpp
* Author: yangchao
*
*/

#include <iostream>
#include <string>
#include <netdb.h>
#include <string.h>
#include <stdlib.h>

using namespace std;

void parseHostAndPagePath(const string url,string &hostUrl,string &pagePath){
hostUrl=url;
pagePath="/";
int pos=hostUrl.find("http://");
if(-1!=pos)
hostUrl=hostUrl.replace(pos,7,"");
pos=hostUrl.find("https://");
if(-1!=pos)
hostUrl=hostUrl.replace(pos,8,"");
pos=hostUrl.find("/");
if(-1!=pos)
{
pagePath=hostUrl.substr(pos);
hostUrl=hostUrl.substr(0,pos);
}
}

string getPageContent(const string url){
struct hostent *host;
string hostUrl,pagePath;
parseHostAndPagePath(url,hostUrl,pagePath);
if(0==(host=gethostbyname(hostUrl.c_str())))
{
cout<<"gethostbyname error\n"<<endl;
exit(1);
}
struct sockaddr_in pin;
int port=80;
bzero(&pin,sizeof(pin));
pin.sin_family=AF_INET;
pin.sin_port=htons(port);
pin.sin_addr.s_addr=((struct in_addr*)(host->h_addr))->s_addr;
int isock;
if((isock=socket(AF_INET,SOCK_STREAM,0))==-1)
{
cout<<"open socket error\n"<<endl;
exit(1);
}
string requestHeader;
requestHeader="GET "+pagePath+" HTTP/1.1\r\n";
requestHeader+="Host: "+hostUrl+"\r\n";
requestHeader+="Accept: */*\r\n";
requestHeader+="User-Agent: Mozilla/4.0(compatible)\r\n";
requestHeader+="connection:Keep-Alive\r\n";
requestHeader+="\r\n";
if(connect(isock,(const sockaddr*)&pin,sizeof(pin))==-1){
cout<<"connect error\n"<<endl;
exit(1);
}
if(send(isock,requestHeader.c_str(),requestHeader.size(),0)==-1){
cout<<"send error\n"<<endl;
exit(1);
}
struct timeval timeout={1,0};
setsockopt(isock,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(struct timeval));
char c;
bool flag=true;
while(recv(isock,&c,1,0)>0){
if('\r'==c){
continue;
}else if('\n'==c){
if(false==flag)
break;
flag=false;
}else{
flag=true;
}
}
int len,BUFFER_SIZE=512;
char buffer[BUFFER_SIZE];
string pageContent="";
while((len=recv(isock,buffer,BUFFER_SIZE-1,0))>0){
buffer[len]='\0';
pageContent+=buffer;
}
return pageContent;
}

int main(int argc, char** argv) {
cout<<getPageContent("http://www.hao123.com")<<endl;
return 0;
}

以上這篇linux c++模擬簡(jiǎn)易網(wǎng)絡(luò)爬蟲(chóng)實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語(yǔ)言軟件spi虛擬總線中間層設(shè)計(jì)詳解

    C語(yǔ)言軟件spi虛擬總線中間層設(shè)計(jì)詳解

    這篇文章主要為大家介紹了C語(yǔ)言軟件spi虛擬總線中間層設(shè)計(jì)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • C++模擬實(shí)現(xiàn)vector的示例代碼

    C++模擬實(shí)現(xiàn)vector的示例代碼

    Vector是一個(gè)能夠存放任意類型的動(dòng)態(tài)數(shù)組,有點(diǎn)類似數(shù)組,是一個(gè)連續(xù)地址空間。本文將用C++模擬實(shí)現(xiàn)vector,感興趣的小伙伴可以了解一下
    2022-08-08
  • C/C++根據(jù)年月日計(jì)算星期幾(蔡勒公式篇)

    C/C++根據(jù)年月日計(jì)算星期幾(蔡勒公式篇)

    這篇文章主要給大家介紹了關(guān)于C/C++根據(jù)年月日計(jì)算星期幾(蔡勒公式篇)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 用C語(yǔ)言求冪函數(shù)和指數(shù)函數(shù)的方法

    用C語(yǔ)言求冪函數(shù)和指數(shù)函數(shù)的方法

    這篇文章主要介紹了用C語(yǔ)言求冪函數(shù)和指數(shù)函數(shù)的方法,即pow()函數(shù)和sqrt()函數(shù)的使用,需要的朋友可以參考下
    2015-08-08
  • 漫畫(huà)講解C語(yǔ)言中最近公共祖先的三種類型

    漫畫(huà)講解C語(yǔ)言中最近公共祖先的三種類型

    這篇文章主要總結(jié)了使用C語(yǔ)言查找最近公共祖先的三種方法類型,用漫畫(huà)的方式講解原理定義,看上去更生動(dòng)形象,幫助你更好的理解透徹,快來(lái)跟著本文往下看吧
    2021-11-11
  • C++ 空指針解引用的解決方法

    C++ 空指針解引用的解決方法

    空指針解引用是一種常見(jiàn)且嚴(yán)重的錯(cuò)誤,它通常由于指針未初始化、被設(shè)置為nullptr或指向無(wú)效地址引起,本文主要介紹了C++ 空指針解引用的解決方法,感興趣的可以了解一下
    2024-08-08
  • C++輸出問(wèn)題:保留兩位小數(shù)

    C++輸出問(wèn)題:保留兩位小數(shù)

    這篇文章主要介紹了C++輸出問(wèn)題:保留兩位小數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語(yǔ)言程序環(huán)境中的預(yù)處理詳解

    C語(yǔ)言程序環(huán)境中的預(yù)處理詳解

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言程序環(huán)境中的預(yù)處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • C++ Qt之halcon讀取像素項(xiàng)目過(guò)程詳解

    C++ Qt之halcon讀取像素項(xiàng)目過(guò)程詳解

    這篇文章主要介紹了C++ Qt之halcon讀取像素項(xiàng)目過(guò)程詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Qt使用隨機(jī)驗(yàn)證碼的實(shí)現(xiàn)示例

    Qt使用隨機(jī)驗(yàn)證碼的實(shí)現(xiàn)示例

    有時(shí)候在登錄界面需要驗(yàn)證碼功能,這樣能夠防止被惡意程序攻擊,本文主要介紹了Qt使用隨機(jī)驗(yàn)證碼的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01

最新評(píng)論

三都| 江油市| 腾冲县| 望江县| 太原市| 玉屏| 沁水县| 中阳县| 蛟河市| 安平县| 西和县| 涟源市| 邳州市| 洛川县| 武陟县| 安泽县| 昭通市| 密山市| 云阳县| 伊春市| 千阳县| 肇州县| 红原县| 溧水县| 治县。| 策勒县| 灵寿县| 青浦区| 博白县| 德令哈市| 淳安县| 怀化市| 尼玛县| 霸州市| 淮阳县| 合川市| 泽库县| 辉南县| 龙南县| 余庆县| 砚山县|