Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用POST请求的C中HTTP测试代码返回405状态代码_C_Http_Post_Client_Recv - Fatal编程技术网

使用POST请求的C中HTTP测试代码返回405状态代码

使用POST请求的C中HTTP测试代码返回405状态代码,c,http,post,client,recv,C,Http,Post,Client,Recv,我编写了一个测试代码,首先连接到web服务器。然后,它使用GET请求一个包含登录表单的页面。GET工作,并从web服务器返回200状态代码。在检索页面后,我尝试发送POST请求以发送一些登录信息,但却收到405 METHOD_NOT_ALLOWED状态码作为返回 以下是发送GET的代码: char data[273] = "GET /login HTTP/1.1\r\nHost: www.minecraft.net\r\nUser-Agent: Web-sniffer/1.0.37 (+http

我编写了一个测试代码,首先连接到web服务器。然后,它使用GET请求一个包含登录表单的页面。GET工作,并从web服务器返回200状态代码。在检索页面后,我尝试发送POST请求以发送一些登录信息,但却收到405 METHOD_NOT_ALLOWED状态码作为返回

以下是发送GET的代码:

char data[273] = "GET /login HTTP/1.1\r\nHost: www.minecraft.net\r\nUser-Agent: Web-sniffer/1.0.37 (+http://web-sniffer.net/)\r\nAccept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7\r\nCache-Control: no-cache\r\nAccept-Language: de,en;q=0.7,en-us;q=0.3\r\nReferer: http://web-sniffer.net/\r\n\r\n";
if ((val = send(sockfd, &data,272,0)) == -1){
    perror("send");
}
这是包含POST命令的代码,用户名和密码已更改,因此不会给出任何个人信息:

char data2[405] = "POST /login HTTP/1.1\r\nHost: www.minecraft.net\r\nConnection: close\r\nUser-Agent: Web-sniffer/1.0.37 (+http://web-sniffer.net/)\r\nAccept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7\r\nCache-Control: no-cache\r\nAccept-Language: de,en;q=0.7,en-us;q=0.3\r\nReferer: http://web-sniffer.net/\r\nContent-type: application/x-www-form-urlencoded\r\nContent-length: 38\r\n\r\nusername=ausername&password=apassword";
if ((val = send(sockfd, &data2,404,0)) == -1){
    perror("send");
}
要使数据包可读,请执行以下操作:

GET /login HTTP/1.1[CRLF]
Host: www.minecraft.net[CRLF]
User-Agent: Web-sniffer/1.0.37 (+http://web-sniffer.net/)[CRLF]
Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7[CRLF]
Cache-Control: no-cache[CRLF]
Accept-Language: de,en;q=0.7,en-us;q=0.3[CRLF]
Referer: http://web-sniffer.net/[CRLF]
[CRLF]
邮包:

POST /login HTTP/1.1[CRLF]
Host: www.minecraft.net[CRLF]
Connection: close[CRLF]
User-Agent: Web-sniffer/1.0.37 (+http://web-sniffer.net/)[CRLF]
Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7[CRLF]
Cache-Control: no-cache[CRLF]
Accept-Language: de,en;q=0.7,en-us;q=0.3[CRLF]
Referer: http://web-sniffer.net/[CRLF]
Content-type: application/x-www-form-urlencoded[CRLF]
Content-length: 38[CRLF]
[CRLF]
username=ausername&password=apassword
您可能会注意到,用户代理是Web嗅探器,因为我使用Web-sniffer.net制作了这些数据包,这些数据包在他们的网站上工作,因为那里的POST命令返回了302找到的状态代码


我想知道为什么在web-sniffer.net上使用完全相同的数据包,但在这里却不起作用时,会在这里观察到这种行为。

它们是相同的服务器实现吗?人们不一定期望在一台服务器上工作的登录机制在另一台服务器上工作。查看www.minecraft.net的来源,登录目的地是(不是http),这可能是这里的具体原因。没有http的地址表示它没有使用http作为登录机制?对于web嗅探器数据包生成,如果您转到www.minecraft.net/login?username=avalidusername&password=avalidPassword,它将创建POST数据包。您需要检查数据包详细信息上方的“连接到…”行。http和https的数据包在其他情况下看起来可能相同,但它们基本上要去不同的站点。你是说主机:line?