Post返回400错误,可能是发送的数据有问题 谁来帮帮我
我写一个能通过post点击的我网页按钮的程序,可放回总是400错误
400 bad request
the request has an invalid header name
是我要发送的数据有问题吗 请大家帮我看一看。
- C# code
protected void Button1_Click(object sender, EventArgs e) { Label1.Text = (int.Parse(Label1.Text) + 1).ToString(); }- C/C++ code
#include "stdio.h"#include "stdlib.h"#include "winsock2.h"#include"conio.h"#pragma comment(lib,"ws2_32.lib")int main(){ SOCKET hsocket; SOCKADDR_IN saServer; WSADATA wsadata; LPHOSTENT lphostent; int nRet; char* host_name="192.168.219.1"; char* reqHead="POST /default.aspx HTTP/1.1\r\n" "pragma:no-cache\r\n""Accept:text/html, application/xhtml+xml, */*\r\n""Referer:http://192.168.219.1/default.aspx\r\n""Accept-Language:zh-CN\r\n""User-Agent:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)\r\n""Content-Type:application/x-www-form-urlencoded\r\n""Accept-Encoding:gzip,deflate\r\n""Host:192.168.219.1\r\n""Content-Length:192\r\n""Connection:Keep-Alive\r\n""Cache-Control:no-cache\r\n""__VIEWSTATE=%2FwEPDwUKLTMyNDcxODYzNQ9kFgICAw9kFgICAw8PFgIeBFRleHQFATJkZGSwHfmZ0K4tQfRw3xFfLisrdyd0wg%3D%3D&__EVENTVALIDATION=%2FwEWAgKWw8aHBgKM54rGBmWhGwUcHj2AyR2%2BpwXvfu0qkwRW&Button1=Button";// 初始化套接字 while(1) { if(WSAStartup(MAKEWORD(2,2),&wsadata)) printf("初始化SOCKET出错!"); lphostent=gethostbyname(host_name); if(lphostent==NULL) printf("lphostent为空!"); hsocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); saServer.sin_family = AF_INET; saServer.sin_port = htons(80); saServer.sin_addr =*((LPIN_ADDR)*lphostent->h_addr_list); // 利用SOCKET连接 nRet = connect(hsocket,(LPSOCKADDR)&saServer,sizeof(SOCKADDR_IN)); if(nRet == SOCKET_ERROR) { printf("建立连接时出错!"); closesocket(hsocket); return 0; } // 利用SOCKET发送 if(getch()=='1'){ nRet = send(hsocket,reqHead,strlen(reqHead),0); if(nRet==SOCKET_ERROR) { printf("发送数据包时出错!"); closesocket(hsocket); } char Dest[3000]; memset(Dest,0,3000); nRet=1; while(nRet>0) { //send(hsocket,reqHead,strlen(reqHead),0); // 接收返回数据包 nRet=recv(hsocket,(LPSTR)Dest,sizeof(Dest),0); if(nRet>0) Dest[nRet]=0; else Dest[0]=0; // 显示返回数据包的大小、内容 printf("\nReceived bytes:%d\n",nRet); printf("Result:\n%s",Dest); }} }}[解决办法]
检查一下发送的数据内容中是否有空格或其它特殊符号。
[解决办法]
一时看不出来,你最好用http抓包分析工具,捕获正常的包数据和你的request header对比。工具如sniffer,http analyzerstd,commview等。
1.检查是否缺少回车换行。
2.检查post数据的编码。进行utf-8编码之后。post
[解决办法]
"Cache-Control:no-cache\r\n\r\n" 增加一个回车换行试试看
"__VIEWSTATE=%2FwEPDwUKLTMyNDcxODYzNQ9kFgICAw9kFgICAw8PFgIeBFRleHQFATJkZGSwHfmZ0K4tQfRw3xFfLisrdyd0wg%3D%3D&__EVENTVALIDATION=%2FwEWAgKWw8aHBgKM54rGBmWhGwUcHj2AyR2%2BpwXvfu0qkwRW&Button1=Button";