处理HTTP POST请求/响应
Handling HTTP POST request/response
我一直在尝试将HTTP POST请求发送到Facebook而没有成功的情况下,我从服务器获得此响应:
http/1.1 400不良请求内容类型:text/html;charset = UTF-8日期: 星期六,2016年12月10日21:28:17 GMT连接:关闭内容长度:2959
Facebook |错误
对不起,我们正在处理问题,我们将其修复 我们尽快
我的代码
#include <iostream>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <unistd.h>
#include <netdb.h>
#include <fstream>
using namespace std;
int main()
{
int s, error;
struct sockaddr_in addr;
s = socket(AF_INET, SOCK_STREAM, 0);
if(s <0)
{
cout<<"Error 01: creating socket failed!n";
close(s);
return 1;
}
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
inet_aton("31.13.90.36",&addr.sin_addr);
error = connect(s,(sockaddr*)&addr,sizeof(addr));
if(error!=0)
{
cout<<"Error 02: conecting to server failed!n";
close(s);
return 1;
}
const int msgSize = 1042;
char msg[] = "POST /login.php?login_attempt=1 rn"
"HTTP/1.1rn"
"HOST: facebook.comrnrn"
"Content-type: application/x-www-form-urlencodedrn"
"Content-Length: 41rn"
"email=lel@gmail.com&pass=test123&submit=1rn" ;
char answ[1042];
//cin.getline(&msg[0],256);
send(s,msg,strlen(msg),0);
ssize_t len;
while((len = recv(s, msg, strlen(msg), 0)) > 0)
{
cout.write(msg, len);
std::cout << std::flush;
}
if(len < 0)
{
cout << "error";
}
close(s);
}
我做错了什么?
您的消息中有几个错误。这是您根据代码发送的内容:
1 POST /login.php?login_attempt=1 rn
2 HTTP/1.1rn
3 HOST: facebook.comrnrn
4 Content-type: application/x-www-form-urlencodedrn
5 Content-Length: 41rn
6 email=lel@gmail.com&pass=test123&submit=1rn
相反,应该像这样:
1 POST /login.php?login_attempt=1 HTTP/1.1rn
2 HOST: facebook.comrn
3 Content-type: application/x-www-form-urlencodedrn
4 Content-Length: 41rn
5 rn
6 email=lel@gmail.com&pass=test123&submit=1
详细:
- 第1行和第2行应该是一行,即"方法路径http-version"
- 第3行不应包含多个
rn
- 相反,空行
rn
应在所有HTTP标头(新行5)之后 - 第6行中的主体应仅包含内容长度涵盖的数据。您在此设置的41个字节不包括您发送的
rn
除此之外,您无法正确解析响应,而是希望服务器完成响应后关闭连接。由于您使用的是HTTP/1.1
,因此您隐式使用持久连接(HTTP Keep-Alive),因此服务器实际上可能在同一TCP连接中等待更多请求,而不会立即关闭连接。
我真的建议您研究HTTP的标准,而不是猜测协议的工作方式。
相关文章:
- 为什么当通过 TCP 发送的消息速率增加时,请求-响应消息对的延迟会降低?
- 如何在 rxcpp 中处理请求/响应流
- 异步WT :: HTTP ::客户端响应和请求匹配
- 如何调用对带有句点的服务器的请求,并在响应无效时再次发送
- 处理HTTP POST请求/响应
- 错误 1503:服务未及时响应启动或控制请求
- 生成不带存根的 WSDL 请求/响应
- 使用Resiprocate SIP堆栈转发SIP请求/响应
- IHttp请求响应长度限制
- 服务器在实现 POST 请求时响应字符串不完整
- 请求-响应系统
- GET请求后服务器的响应不正确
- 使用lambda的异步请求/响应
- 支持SOAP请求/响应的最佳XML解析器
- 相同的请求不同的响应
- 对于不存在的对象,Amazon S3 HEAD 请求返回空响应,而不是 404
- C++ 将请求发送到 Web 服务器上的 API,然后接收 JSON 数组响应
- 模拟器,发送请求 - 响应并打开TCP连接
- 快速修复会自动响应测试请求消息
- 如何发送http请求并检索json响应C++Boost