实现对HTTP协议工作过程的模拟
来源:互联网 发布:小乔丹数据 编辑:程序博客网 时间:2024/05/17 21:06
#include <iostream>
#include <cstring>
#include <string>
#include <Winsock2.h>
#pragma comment(lib,"Ws2_32.lib")
using namespace std;
int main(){
SOCKET sock;
sockaddr_in addrSrv;
string host="www.sina.com.cn";
hostent *haddr;
bool label=false;
int num=0;
int jmp;
string content;
char *buffer=new char[1024];
content.empty();
WSADATA wsadata;
FILE *fp=fopen("./temp.html","a+");
if(WSAStartup(MAKEWORD(1,1),&wsadata)!=0){
cout<<"WSAStartup() error!"<<endl;
return 0;
}
if(LOBYTE(wsadata.wVersion)!=1||HIBYTE(wsadata.wVersion)!=1){
WSACleanup();
cout<<"WSAStartup() error!"<<endl;
return 0;
}
if((sock=socket(AF_INET,SOCK_STREAM,0))==-1){
cout<<"socket() error!"<<endl;
return 0;
}
if((haddr=gethostbyname(host.c_str()))==NULL){
cout<<"gethostbyname() error!"<<endl;
return 0;
}
addrSrv.sin_addr=*((struct in_addr *)*(haddr->h_addr_list));
//cout<<inet_ntoa(addrSrv.sin_addr)<<endl;
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(80);
if(connect(sock,(sockaddr *)&addrSrv,sizeof(addrSrv))==-1){
cout<<"connect() error!"<<endl;
return 0;
}
send(sock,"GET / HTTP/1.1\r\n",strlen("GET / HTTP/1.1\r\n"),0);
send(sock,"Host:222.25.185.203\r\n",strlen("Host:222.25.185.203\r\n"),0);
send(sock,"Accept:application/x-coment,image/gif,image/x-xbitmap,image/jpg,image/pjpeg,*/*\r\n",strlen("Accept:application/x-coment,image/gif,image/x-xbitmap,image/jpg,image/pjpeg,*/*\r\n"),0);
send(sock,"User-Agent:Mozilla/4.0\r\n",strlen("User-Agent:Mozilla/4.0\r\n"),0);
send(sock,"Connection:Keep-Alive\r\n",strlen("Connection:Keep-Alive\r\n"),0);
send(sock,"\r\n",strlen("\r\n"),0);
send(sock,"\r\n",strlen("\r\n"),0);//添加两个回车换行
jmp=0;
while(!label){
num=recv(sock,buffer,1,0);
content+=*buffer;
if(num<0){
label=true;
}
switch(*buffer){
case '\r':
break;
case '\n':
if(jmp==0)
label=true;
jmp=0;
break;
default:
jmp++;
break;
}
//cout<<buffer[0];
}
cout<<content;
do{
memset(buffer,'\0',1024);
num=recv(sock,buffer,1024,0);
if(num<0)
break;
//content+=buffer;
content.append(buffer);
fwrite(buffer,strlen(buffer),1,fp);
//fputs(buffer,fp);
//cout<<buffer;
}while(num>0);
closesocket(sock);
if(WSACleanup()!=0){
cout<<"WSACleanup() error!"<<endl;
}
//cout<<content<<endl;
fclose(fp);
ShellExecute(NULL,"open",".\\temp.html",NULL,NULL,SW_SHOWNORMAL);
return 0;
}
- 实现对HTTP协议工作过程的模拟
- Java实现对http协议的解析
- 利用WebClient实现对Http协议的Post和Get对网站进行模拟登陆和浏览
- 利用WebClient实现对Http协议的Post和Get对网站进行模拟登陆和浏览
- HTTP协议的工作原理
- http协议的工作原理
- http协议的工作原理?
- HTTP协议的工作原理?
- BT协议的工作过程
- BT协议的工作过程
- ARP协议的工作过程
- arp协议的工作过程
- 对http协议的理解
- Cookie工作过程& HTTP无状态协议分析与Cookie的关系
- HTTP协议请求响应过程和HTTPS工作原理
- HTTP协议请求响应过程和HTTPS工作原理
- HTTP协议的概念和工作原理
- http协议的工作原理【zz】
- 远程使用Matlab on linux
- 生成文件目录
- Investigate into Portfolio Multi Media Tab Gallery - 2
- 我的第一份小项目作业.....开心 (2007-12-14 18:53) (矩阵加减乘 C语言)
- JComboBox 打印 ASCII码
- 实现对HTTP协议工作过程的模拟
- C#入门经典学习12-泛型
- ALSA移植命令记录
- 监听可编辑JComboBox内容改变实现验证
- AOP术语
- 函数invalidate
- C++里的静态成员函数不能用const的原因
- Linux下C++访问MySQL
- 一个简单Tcp通信的实现