c/c++的http协议的get和post方法
2012-12-26 10:41
253 查看
看看人家写的。
int sock;
struct sockaddr_in sin;
struct hostent *he=gethostbyname(Server);
if(!he)
{
return HTTP_UNKNOW_HOST;
}
sin.sin_family=he->;h_addrtype;
sin.sin_port = htons(m_port);
sin.sin_addr.s_addr=((unsigned long*)(he->;h_addr_list[0]))[0];
if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
{
return HTTP_SOCKET_ERROR;
}
if(connect(sock,(struct sockaddr*)&sin,sizeof(sin))<0)
{
close(sock);
return HTTP_CONNECT_ERROR;
}
char str[4096];
sprintf(str,"GET %s HTTP/1.0\r\nHost:%s\r\nUser-Agent:Mozilla/4.0\r\n\r\n",query,(LPCSTR)m_host);
if(write(sock,str,strlen(str))<0)
{
close(sock);
return HTTP_WRITE_ERROR;
}
fd_set rfds;
struct timeval tv;
FD_ZERO(&rfds);
FD_SET(sock,&rfds);
tv.tv_sec=m_nSecs;
tv.tv_usec=0;
if(!select(sock+1,&rfds,NULL,NULL,&tv))
{
close(sock);
return HTTP_SELECT_ERROR;
}
if(FD_ISSET(sock,&rfds))
{
int len=1024*4;
int i=0;
int rv=0;
char* buf=(char*)malloc((len+1)*sizeof(char));
while((rv=read(sock,buf,len)))
{
buf[rv] = 0 ;
m_content += buf ;
}
close(sock);
free(buf) ;
if(!m_content.IsEmpty())
{
if( m_content.Find("200")>;=m_content.Find("\n") ) {
return HTTP_UNKNOWN_ERROR;
}
if(m_pBody=(char*)m_content.Find("\r\n\r\n")) {
*m_pBody='\0';
m_pBody+=4;
} else if(m_pBody=(char*)m_content.Find("\n\n")) {
*m_pBody='\0';
m_pBody+=2 ;
} else {
return HTTP_BAD_HEADER;
}
return 0 ;
}
return HTTP_READ_ERROR ;
}
close(sock);
return HTTP_UNKNOWN_ERROR;
int sock;
struct sockaddr_in sin;
struct hostent *he=gethostbyname(Server);
if(!he)
{
return HTTP_UNKNOW_HOST;
}
sin.sin_family=he->;h_addrtype;
sin.sin_port = htons(m_port);
sin.sin_addr.s_addr=((unsigned long*)(he->;h_addr_list[0]))[0];
if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
{
return HTTP_SOCKET_ERROR;
}
if(connect(sock,(struct sockaddr*)&sin,sizeof(sin))<0)
{
close(sock);
return HTTP_CONNECT_ERROR;
}
char str[4096];
sprintf(str,"GET %s HTTP/1.0\r\nHost:%s\r\nUser-Agent:Mozilla/4.0\r\n\r\n",query,(LPCSTR)m_host);
if(write(sock,str,strlen(str))<0)
{
close(sock);
return HTTP_WRITE_ERROR;
}
fd_set rfds;
struct timeval tv;
FD_ZERO(&rfds);
FD_SET(sock,&rfds);
tv.tv_sec=m_nSecs;
tv.tv_usec=0;
if(!select(sock+1,&rfds,NULL,NULL,&tv))
{
close(sock);
return HTTP_SELECT_ERROR;
}
if(FD_ISSET(sock,&rfds))
{
int len=1024*4;
int i=0;
int rv=0;
char* buf=(char*)malloc((len+1)*sizeof(char));
while((rv=read(sock,buf,len)))
{
buf[rv] = 0 ;
m_content += buf ;
}
close(sock);
free(buf) ;
if(!m_content.IsEmpty())
{
if( m_content.Find("200")>;=m_content.Find("\n") ) {
return HTTP_UNKNOWN_ERROR;
}
if(m_pBody=(char*)m_content.Find("\r\n\r\n")) {
*m_pBody='\0';
m_pBody+=4;
} else if(m_pBody=(char*)m_content.Find("\n\n")) {
*m_pBody='\0';
m_pBody+=2 ;
} else {
return HTTP_BAD_HEADER;
}
return 0 ;
}
return HTTP_READ_ERROR ;
}
close(sock);
return HTTP_UNKNOWN_ERROR;
相关文章推荐
- c/c++ 模拟http 协议,GET/POST 数据方法
- http协议中:GET/POST/PUT/DELETE/INPUT/TRACE/OPTIONS/HEAD方法
- VC实现HTTP协议的GET和POST方法
- HTTP协议中GET和POST方法的区别
- java实现:http协议get和post方法的url参数请求响应及交互
- HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误
- HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误
- http协议中:GET/POST/PUT/DELETE/INPUT/TRACE/OPTIONS/HEAD方法
- HTTP协议中POST方法和GET方法有那些区别?
- HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误
- http协议的get和post方法的区别
- HTTP协议中请求方法Get和Post的区别是什么?
- HTTP请求协议 get post方法 获取数据解析
- http协议中get和post方法的优点和缺点
- HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误
- iOS HTTP协议的get,post方法
- HTTP协议get与post方法的区别
- HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误
- HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误
- 解析HTTP协议六种请求方法,get,head,put,delete,post有什么区别