socket抓取网页
#include <iostream>
#include <string>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <strings.h>
#include <string.h>
#include <unistd.h>
using namespace std; void func()
{
string url;
cout << "输入网址:" << endl;
cin >> url; //依据域名获取ip地址
struct hostent *website_host = NULL;
website_host = gethostbyname(url.c_str());
if (website_host == NULL)
{
perror("gethostbyname error");
exit(-1);
}
cout << "主机名称:";
cout << website_host->h_name << endl;
cout << "地址类型:";
cout << website_host->h_addrtype << endl;
cout << "地址长度:";
cout << website_host->h_length << endl; //建立socket描写叙述符
int sockfd;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1)
{
perror("socket error");
exit(-1);
}
cout << "建立socket完毕" << endl; //初始化地址结构
struct sockaddr_in website_addr;
bzero((void*)&website_addr, sizeof(website_addr));
website_addr.sin_family = AF_INET;
website_addr.sin_port = htons(80);
website_addr.sin_addr.s_addr = ((struct in_addr *)(website_host->h_addr))->s_addr;
cout << "地址初始化完毕" << endl; //连接
int ret;
ret = connect(sockfd, (struct sockaddr*)&website_addr, sizeof(website_addr));
if (ret == -1)
{
perror("connect error");
exit(-1);
}
cout << "连接完毕" << endl; //向80端口发送http头
char buf[10*1024];
char addr[100];
sprintf(buf, "GET / HTTP/1.1\r\n");
strcat(buf, "Host:");
strcat(buf,url.c_str());
strcat(buf, "\r\n");
strcat(buf, "Accept: */*\r\n");
strcat(buf, "User-Agent: Mozilla/4.0(compatible)\r\n");
strcat(buf, "connection:Keep-Alive\r\n");
strcat(buf, "\r\n\r\n");
cout << "请求头构造完毕" << endl;
cout << buf << endl;
ret = send(sockfd, buf, strlen(buf), 0);
cout << "发送完毕" << endl;
cout << "send:\n" << ret << endl; //打开接收文件
int fd;
fd = open("recv.html", O_RDWR);
if (fd == -1)
{
perror("open error");
exit(-1);
} //開始接收
while(1)
{
ret = recv(sockfd, buf, sizeof(buf), 0);
if (ret == 0)
{
cout << "对端关闭" << endl;
exit(-1);
}
if (ret == -1)
{
perror("read error");
exit(-1);
}
buf[ret] = 0;
cout << "recv:" << ret << endl;
cout << buf << endl;
write(fd, buf, strlen(buf));
}
} int main()
{
func();
return 0;
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
socket抓取网页的更多相关文章
- 使用Socket抓取网页源码
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...
- [转]Linux Socket编程 Socket抓取网页源码
“一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. ——有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览 ...
- python分布式抓取网页
呵呵,前两节好像和python没多大关系..这节完全是贴代码, 这是我第一次写python,很多地方比较乱,主要就看看逻辑流程吧. 对于编码格式确实搞得我头大..取下来页面不知道是什么编码,所以先找c ...
- C语言Linix服务器网络爬虫项目(二)项目设计和通过一个http请求抓取网页的简单实现
我们通过上一篇了解了爬虫具体要实现的工作之后,我们分析得出的网络爬虫的基本工作流程如下: 1.首先选取一部分精心挑选的种子URL: 2.将这些URL放入待抓取URL队列: 3.从待抓取URL队列中取出 ...
- 使用wget工具抓取网页和图片 成功尝试
使用wget工具抓取网页和图片 发表于1年前(2014-12-17 11:29) 阅读(2471) | 评论(14) 85人收藏此文章, 我要收藏 赞7 wget 网页抓取 图片抓取 目录[-] ...
- Java 抓取网页中的内容【持续更新】
背景:前几天复习Java的时候看到URL类,当时就想写个小程序试试,迫于考试没有动手,今天写了下,感觉还不错 内容1. 抓取网页中的URL 知识点:Java URL+ 正则表达式 import jav ...
- C语言调用curl库抓取网页图片
思路是先用curl抓取网页源码,然后以关键字寻找出图片网址. #include <stdio.h> #include <stdlib.h> #include <str ...
- [转载]爬虫的自我解剖(抓取网页HtmlUnit)
网络爬虫第一个要面临的问题,就是如何抓取网页,抓取其实很容易,没你想的那么复杂,一个开源HtmlUnit包,4行代码就OK啦,例子如下: 1 2 3 4 final WebClient webClie ...
- C语言调用curl库抓取网页图片(转)
思路是先用curl抓取网页源码,然后以关键字寻找出图片网址. 范例: #include <stdio.h> #include <stdlib.h> #include < ...
随机推荐
- uva11922(强行用rope替代spaly)
spaly没学过,用rope水过, rope是extension库中的东西,codeblocks编译器支持, 需要包含 #include <ext/rope>using namespace ...
- 浅谈新一代Android操作系统Android L
今天早一些的时候,Google公布了新一代Android操作系统Android L.让我很意外的是命名规则的变化,之前外界纷纷推測会叫Android5.0,同一时候会给一个甜品的名字命名.由于Andr ...
- 认为C/C++很难理解、找工作面试笔试,快看看这本书!
假设你是C/C++谁刚开始学习,看这本书.因为也许你读其他的书还不如不看.一定要选择一本好书. 假设你正在准备工作,请认真看这本书,由于这本书会教会你工作中必备的知识,相信你即将面临的语法类题目不会超 ...
- uva 11427 - Expect the Expected(概率)
题目链接:uva 11427 - Expect the Expected 题目大意:你每天晚上都会玩纸牌,每天固定最多玩n盘,每盘胜利的概率为p,你是一个固执的人,每天一定要保证胜局的比例大于p才会结 ...
- 3D MAX脚本教程1
本文转载自http://jiurong995294.blog.163.com/blog/static/195133243201192531546490/ 方便以后须要时候使用 为什么要学习3D MAX ...
- 【Java先进】Lock、通过使用线程池
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util ...
- DM8168 CameraLink 视频噪点问题解决
几天前写过FPGA採集LVDS视频(噪点去除),当时的情况是CameraLink视频出现了非常多噪点,不堪入目,硬件方面没有找到毛病,仅仅能是用硬件描写叙述语言对採集前端的FPGA又一次进行了处理,效 ...
- 使用clojure訪问SQL Server数据库
(require '[korma.core :as kc]) (require '[korma.db :as kd]) (Class/forName "com.microsoft.jdbc. ...
- html风格的滚动条
DIV辊棒的设置 (CSS)2008/09/26 03:07div 控制滚动条2008年01月06日本 星期日 01:181)隐藏滚动条<body style="overflow-x: ...
- MySQL InnoDB存储引擎undo redo解析
本文介绍MySQL数据库InnoDB存储引擎重做日志漫游 00 – Undo Log Undo Log 为了实现事务原子,在MySQL数据库InnoDB存储引擎,还使用Undo Log(简称:MVCC ...