C++ 为什么我的程序在HTTP/1.1中读取额外字节
我正在试验套接字,并试图构建一个非常简单的webbot 这是我的代码:C++ 为什么我的程序在HTTP/1.1中读取额外字节,c++,http,sockets,C++,Http,Sockets,我正在试验套接字,并试图构建一个非常简单的webbot 这是我的代码: #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netdb.h> #include <errno.h> #include <cstring> #include <iostream> #include <string>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <errno.h>
#include <cstring>
#include <iostream>
#include <string>
#define HTTP_PORT "80"
#define HOST "www.taringa.net"
#define PORT HTTP_PORT
#define IN_BUFFSIZE 1024
#define OUT_BUFFSIZE 1024
#define REQUEST "GET /Taringa/posts HTTP/1.0\r\nHost: www.taringa.net\r\nUser-Agent: foo\r\n\r\n"
using namespace std;
int main(int argc, char **argv) {
struct addrinfo hints, *res;
struct sockaddr_in servAddress;
int sockfd;
char addrstr[100];
char buff_msg_out[OUT_BUFFSIZE], buff_msg_in[IN_BUFFSIZE];
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
if ( getaddrinfo(HOST, HTTP_PORT, &hints, &res) != 0) {
cerr << "Error en getaddrinfo" << endl;
return -1;
}
// Crear socket
if ( ( sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol) ) < 0 )
{
cerr << "Error en socket()" << endl;
return -1;
}
// Iniciar conexion
if ( connect(sockfd, res->ai_addr, res->ai_addrlen) == -1 )
{
cerr << "Error en connect()" << endl;
cerr << "Error: " << strerror(errno) << endl;
return -1;
}
cout << "Conectado con éxito" << endl;
// Enviar datos
strncpy(buff_msg_out, REQUEST, strlen(REQUEST));
if ( send(sockfd, buff_msg_out, strlen(buff_msg_out), 0) <= 0 )
{
cerr << "Error en write()" << endl;
return -1;
}
cout << "Mensaje enviado:" << endl << buff_msg_out << endl << endl;
int bytes_recv = 0;
while ( ( bytes_recv = recv(sockfd, buff_msg_in, IN_BUFFSIZE-1, 0)) > 0 )
{
buff_msg_in[bytes_recv] = '\0';
cout << buff_msg_in << endl;
}
freeaddrinfo(res);
close(sockfd);
return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#定义HTTP_端口“80”
#定义主机“www.taringa.net”
#定义端口HTTP\u端口
#在大小1024中定义
#定义出大小为1024的
#定义请求“GET/Taringa/posts HTTP/1.0\r\n主机:www.Taringa.net\r\n用户代理:foo\r\n\r\n”
使用名称空间std;
int main(int argc,字符**argv){
结构addrinfo提示,*res;
servAddress中的结构sockaddr_;
int-sockfd;
char addrstr[100];
char buff_msg_out[out_BUFFSIZE],buff_msg_in[in_BUFFSIZE];
memset(&hints,0,sizeof(hints));
hits.ai_family=AF_unsec;
hits.ai_socktype=SOCK_流;
if(getaddrinfo(主机、HTTP_端口、提示和res)!=0){
cerr ai_socktype,res->ai_协议)<0)
{
cerr ai_addrlen)==-1)
{
瑟尔
服务器:n0
日期:2013年2月1日星期五20:03:54 GMT
内容类型:text/html;charset=utf8
传输编码:分块
连接:保持活力
如果您不支持HTTP 1.1,请不要说您支持HTTP 1.1
所有HTTP/1.1应用程序必须能够接收和解码“分块”传输编码,并且必须忽略它们不理解的分块扩展。-
服务器:n0
日期:2013年2月1日星期五20:03:54 GMT
内容类型:text/html;charset=utf8
传输编码:分块
连接:保持活力
如果您不支持HTTP 1.1,请不要说您支持HTTP 1.1
所有HTTP/1.1应用程序必须能够接收和解码“分块”传输编码,并且必须忽略它们不理解的分块扩展。-
服务器正在使用。d0f是以十六进制表示的八位字节中的“块”长度。0是下一个块的长度(即没有)。服务器正在使用。d0f是以十六进制表示的八位字节中的“块”长度。0是下一个块的长度(即没有).伟大的人想法相似,但伟大的人思考速度快70秒。笑这是一个非常棒的评论,我希望我能投两次票。伟大的人想法相似,但伟大的人思考速度快70秒。笑这是一个非常棒的评论,我希望我能投两次票。
HTTP/1.1 200 OK
Server: n0
Date: Fri, 01 Feb 2013 19:57:26 GMT
Content-Type: text/html; charset=utf8
Connection: close
Set-Cookie: trngssn=06359673; path=/
Set-Cookie: trngssn=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.taringa.net
Set-Cookie: taringa_user_id=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.taringa.net
Set-Cookie: lastNick=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.taringa.net
Set-Cookie: fbs=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.taringa.net
Set-Cookie: tws=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.taringa.net
Set-Cookie: iB-friendfind=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.taringa.net
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es" >
<head profile="http://purl.org/NET/erdf/profile" prefix="og: http://ogp.me/ns
# fb: http://ogp.me/ns/fb# article: http://ogp.me/ns/article#">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv=”X-Frame-Options” content=”Deny” />
<link rel="alternate" type="application/atom+xml" title="Últimos Posts de Taringa" href="/rss/Taringa/posts/" />
<link rel="alternate" type="application/atom+xml" title="Últimos Temas de Taringa" href="/rss/Taringa/tem
as/" />
<title>Posts de Taringa! - Taringa!</title>
</body>
</html>
HTTP/1.1 200 OK
Server: n0
Date: Fri, 01 Feb 2013 20:03:54 GMT
Content-Type: text/html; charset=utf8
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: trngssn=81047255; path=/
Set-Cookie: trngssn=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.taringa.net
Set-Cookie: taringa_user_id=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.taringa.net
Set-Cookie: lastNick=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.taringa.net
Set-Cookie: fbs=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.taringa.net
Set-Cookie: tws=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.taringa.net
Set-Cookie: iB-friendfind=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.taringa.net
d0f
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es" >
<head profile="http://purl.org/NET/erdf
/profile" prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# article: http://ogp.me/ns/article#">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv=”X-Frame-Options” content=”Deny” />
<link rel="alternate" type="application/atom+xml" title="Últimos Posts de Taringa" href="/rss/Taringa/posts/" />
<link rel="alternate" type="application/atom+xml" title="Últimos Te
mas de Taringa" href="/rss/Taringa/temas/" />
<title>Posts de Taringa! - Taringa!</title>
</body>
</html>
0
</html>HTTP/1.0 400 Bad request
Cache-Control: no-cache
Connection: close
Content-Type: text/html
<html><body><h1>400 Bad request</h1>
Your browser sent an invalid request.
</body></html>