读书人

Post返回400异常可能是发送的数据有

发布时间: 2012-05-13 16:39:43 作者: rapoo

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";

读书人网 >VC/MFC

热点推荐