C++;客户端无法使用HTTP POST查询将文件发送到PHP服务器

C++;客户端无法使用HTTP POST查询将文件发送到PHP服务器,php,c++,http-headers,http-post,winsock,Php,C++,Http Headers,Http Post,Winsock,我从中复制了代码并对其进行了更改。有C++(客户端)和PHP(服务器)。 当我试图将一个txt文件从客户端上传到服务器时,它并没有上传,而是打印“400错误请求” C++客户端。我尝试在这里用HTTPPOST将一个txt文件(counter.txt)上传到服务器: #包括“pch.h” #包括 #包括 #包括 #包括 #包括 #杂注警告(禁用:4996) #pragma注释(lib,“ws2_32.lib”) 使用名称空间std; #定义端口80 #定义IP“145.14.145.162” #定

我从中复制了代码并对其进行了更改。有C++(客户端)和PHP(服务器)。 当我试图将一个txt文件从客户端上传到服务器时,它并没有上传,而是打印“400错误请求”

C++客户端。我尝试在这里用HTTP
POST
将一个txt文件(counter.txt)上传到服务器:

#包括“pch.h”
#包括
#包括
#包括
#包括
#包括
#杂注警告(禁用:4996)
#pragma注释(lib,“ws2_32.lib”)
使用名称空间std;
#定义端口80
#定义IP“145.14.145.162”
#定义主机“testinngdick.000webhostapp.com”
#定义接收器“/receive_data.php”
#定义COMPNAME“COMPNAME”
#定义程序“程序”
#定义文件名“文件”
#定义边界“------------邪恶的”
#定义虚拟_文件“counter.txt”
//------------------------------------
字符串构造函数体(字符串参数[2],字符串文件[2]);
字符串读取文件(字符串文件名);
//------------------------------------
int main(){
//启动插座!
套接字数据存储;
WSADATA WSADATA;
int error=WSAStartup(0x0202,&wsaData);
如果(错误!=0){
WSACleanup();
出口(1);//妈的,这不应该发生!
}
//所有互联网,参与!
目标中的SOCKADDR_;
target.sinu family=AF\u INET;
target.sin_port=htons(port);
target.sin\u addr.s\u addr=inet\u addr(IP);
dataSock=套接字(AF\u INET、SOCK\u STREAM、IPPROTO\u TCP);
if(dataSock==无效的_套接字){
出口(1);//休斯顿,我们有麻烦了!
}
连接(数据存储,(SOCKADDR*)和目标,sizeof(目标));
字符串程序名[5][2]={{“KULVERTOP”、“Chrome”}、{“KULVERTOP”、“Firefox”}、{“KULVERTOP”、“InternetExplorer”}、{“KULVERTOP”、“Opera”}、{“KULVERTOP”、“Skype”};
字符串文件[2]={FILENAME,“C:\\Users\\Kolya\\counter.txt”};
int a=sizeof(程序名)/sizeof(程序名[0]);
for(int i=0;i
PHP服务器。在这里,我尝试保存输入文件并检查post数据,还尝试检查它们是否正确,并在count.txt中写入“Ok”,但我没有看到此文件(count.txt):


输出C++客户端:


https://prnt.sc/r4b3xv https://prnt.sc/r4b487 https://prnt.sc/r4b4cj https://prnt.sc/r4b4nt
您没有对
连接
发送
接收
执行任何错误处理。如果您误用了
printf()
,则应该改用
std::cout
。此外,您的请求格式稍有错误,
“POST%s HTTP 1.1\r\n”
需要是
“POST%s HTTP/1.1\r\n”
。并且您发布的文本文件似乎为空。另外,
strlen(body.c_str())
应该是
body.length()
body.size()。也就是说,从零开始实现HTTP实际上相当复杂。您确实应该使用HTTP库,例如Microsoft的WinInet或WinHTTP API,或者跨平台的libcurl库。