关于 HTTP/1.1 400 Bad Request ( The data is invalid. ) 的问题

时间:2022-10-06 18:34:00
以下是我的测试程序
         tc.Connect(HttpCommon.IPADDRESS, HttpCommon.PORT);
ns = tc.GetStream();  
String message = "";
message+= "GET /club/garden.html HTTP/1.1 \n";


Byte[] data =Encoding.Unicode.GetBytes(message);
ns.Write(data, 0, data.Length);

Thread.Sleep(TimeSpan.FromMilliseconds(500d));
string recivestring="";
if (ns.DataAvailable){
byte[] buf = new Byte[1024];
int Len = ns.Read(buf, 0, buf.Length);
recivestring = Encoding.ASCII.GetString(buf, 0, Len);
}

this.richTextBox1.Text = recivestring;


调试得到的结果是:
       HTTP/1.1 400 Bad Request ( The data is invalid.  ) 

苦思中,不知问题出在哪儿,还请有经验者指点

24 个解决方案

#1


Byte[] data =Encoding.Unicode.GetBytes(message);
-----------------------------------------------------
Byte[] data =Encoding.Unicode.GetBytes(message.ToCharArray());

试试

#2


GET .....
Host: ???
没有host头,http请求会失败

#3


Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。

#4


GET /wzd24/index.html HTTP/1.1
Accept: */*
Accept-Language: zh-cn,zh-TW;q=0.7,en-US;q=0.3
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; Data Center; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
Host: 192.168.0.54:82
Connection: Keep-Alive
Cookie: visitorId=9d5222c74ffc4155b5d1f1dd265b326f

------------------------------------------------------------
这是一个比较完整的HTTP请求包。
其中
Get,Host是必须存在的。缺一不可。你少了HOST,当然会被返回400错误。

#5


那错误就不在上面的代码了..
楼主贴出出错的地方...

#6


牧兄早..

#7


回复hdt, wzd24 :

我在程序中添加了:
message += "Host:218.16.124.76:80 \n"; //www.lili.cc
message += "Accept-Language: zh-cn,zh-TW;q=0.7,en-US;q=0.3 \n";
message += "Accept-Encoding: gzip, deflate \n";
message += "Connection: Keep-Alive\n\r";

测试结果仍然返回 400错误

我是使用代理上网的, 这会是问题吗?

#8


HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(new System.Uri(a_strUrl));
myReq.Method = "GET";
myReq.Accept = "*/*";
myReq.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";

程序里面可以这样...

#9


回浪客:
那我如何通过ns 来发送 这样一个已装封装好了的  HttpWebRequest

#10


xingxing810512(星星) ( ) 信誉:91    Blog   加为好友  2007-5-18 9:49:57  得分: 0  
 
 
   
回复hdt, wzd24 :

我在程序中添加了:
message += "Host:218.16.124.76:80 \n";//www.lili.cc
message += "Accept-Language: zh-cn,zh-TW;q=0.7,en-US;q=0.3 \n";
message += "Accept-Encoding: gzip, deflate \n";
message += "Connection: Keep-Alive\n\r";

测试结果仍然返回 400错误

我是使用代理上网的, 这会是问题吗?

-------------------------------------------------------------
所面要跟\r\n而不只是一个\n。



---------------------------------------------------------------
To:zhangliu_521(浪客)
你也早啊!
呵呵………………

#11


\n
====>
\r\n

#12


还有,最后还要跟一个空行。也就是说最后要是\r\n\r\n这样的!

#13


回浪客:
那我如何通过ns 来发送 这样一个已装封装好了的  HttpWebRequest
-----------------------------------------------------------------

HttpWebRequest  myReq;

HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();

#14


回上:
程序修改如下:
String message = "";
message += "GET /club/garden.html  HTTP/1.1 \r\n";
message += "Host:www.lili.cc \r\n";
message += "Accept-Language: zh-cn,zh-TW;q=0.7,en-US;q=0.3 \r\n";
message += "Accept-Encoding: gzip, deflate \r\n";
message += "Connection: Keep-Alive\r\n\r\n";


完整的错误结果:
HTTP/1.1 400 Bad Request ( The data is invalid.  )
Via: 1.1 PROXYCENT
Connection: close
Proxy-Connection: close
Pragma: no-cache
Cache-Control: no-cache
Content-Type: text/html
Content-Length: 1946

#15


sorry 你要ns发送...
我这是程序...

#16


回浪客:
HttpwebRequest 中的方法可以自定义吗 例如 GetStock()  .....

#17


回浪客:
HttpwebRequest 中的方法可以自定义吗 例如 GetStock()  .....
----------------------------------------------------------------
我现在用的都是获取和设置..
自定义 LZ可以参考HttpwebRequest 类的详细资料.sorry没研究过

#18


Byte[] data =Encoding.Unicode.GetBytes(message);
把这个改成
Byte[] data =Encoding.ASCII.GetBytes(message);

Byte[] data =Encoding.UTF8.GetBytes(message);
试试

#19


楼主对于更加复杂的处理,那可以用socket

#20


问题解决了

Byte[] data =Encoding.Default.GetBytes(message);

谢谢大家的帮忙!!

#21


还是编码问题,哎

#22


解决了?结贴。

#23


jf

#24


汗……………………………………
又碰到一个不结贴的!

#1


Byte[] data =Encoding.Unicode.GetBytes(message);
-----------------------------------------------------
Byte[] data =Encoding.Unicode.GetBytes(message.ToCharArray());

试试

#2


GET .....
Host: ???
没有host头,http请求会失败

#3


Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。

#4


GET /wzd24/index.html HTTP/1.1
Accept: */*
Accept-Language: zh-cn,zh-TW;q=0.7,en-US;q=0.3
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; Data Center; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
Host: 192.168.0.54:82
Connection: Keep-Alive
Cookie: visitorId=9d5222c74ffc4155b5d1f1dd265b326f

------------------------------------------------------------
这是一个比较完整的HTTP请求包。
其中
Get,Host是必须存在的。缺一不可。你少了HOST,当然会被返回400错误。

#5


那错误就不在上面的代码了..
楼主贴出出错的地方...

#6


牧兄早..

#7


回复hdt, wzd24 :

我在程序中添加了:
message += "Host:218.16.124.76:80 \n"; //www.lili.cc
message += "Accept-Language: zh-cn,zh-TW;q=0.7,en-US;q=0.3 \n";
message += "Accept-Encoding: gzip, deflate \n";
message += "Connection: Keep-Alive\n\r";

测试结果仍然返回 400错误

我是使用代理上网的, 这会是问题吗?

#8


HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(new System.Uri(a_strUrl));
myReq.Method = "GET";
myReq.Accept = "*/*";
myReq.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";

程序里面可以这样...

#9


回浪客:
那我如何通过ns 来发送 这样一个已装封装好了的  HttpWebRequest

#10


xingxing810512(星星) ( ) 信誉:91    Blog   加为好友  2007-5-18 9:49:57  得分: 0  
 
 
   
回复hdt, wzd24 :

我在程序中添加了:
message += "Host:218.16.124.76:80 \n";//www.lili.cc
message += "Accept-Language: zh-cn,zh-TW;q=0.7,en-US;q=0.3 \n";
message += "Accept-Encoding: gzip, deflate \n";
message += "Connection: Keep-Alive\n\r";

测试结果仍然返回 400错误

我是使用代理上网的, 这会是问题吗?

-------------------------------------------------------------
所面要跟\r\n而不只是一个\n。



---------------------------------------------------------------
To:zhangliu_521(浪客)
你也早啊!
呵呵………………

#11


\n
====>
\r\n

#12


还有,最后还要跟一个空行。也就是说最后要是\r\n\r\n这样的!

#13


回浪客:
那我如何通过ns 来发送 这样一个已装封装好了的  HttpWebRequest
-----------------------------------------------------------------

HttpWebRequest  myReq;

HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();

#14


回上:
程序修改如下:
String message = "";
message += "GET /club/garden.html  HTTP/1.1 \r\n";
message += "Host:www.lili.cc \r\n";
message += "Accept-Language: zh-cn,zh-TW;q=0.7,en-US;q=0.3 \r\n";
message += "Accept-Encoding: gzip, deflate \r\n";
message += "Connection: Keep-Alive\r\n\r\n";


完整的错误结果:
HTTP/1.1 400 Bad Request ( The data is invalid.  )
Via: 1.1 PROXYCENT
Connection: close
Proxy-Connection: close
Pragma: no-cache
Cache-Control: no-cache
Content-Type: text/html
Content-Length: 1946

#15


sorry 你要ns发送...
我这是程序...

#16


回浪客:
HttpwebRequest 中的方法可以自定义吗 例如 GetStock()  .....

#17


回浪客:
HttpwebRequest 中的方法可以自定义吗 例如 GetStock()  .....
----------------------------------------------------------------
我现在用的都是获取和设置..
自定义 LZ可以参考HttpwebRequest 类的详细资料.sorry没研究过

#18


Byte[] data =Encoding.Unicode.GetBytes(message);
把这个改成
Byte[] data =Encoding.ASCII.GetBytes(message);

Byte[] data =Encoding.UTF8.GetBytes(message);
试试

#19


楼主对于更加复杂的处理,那可以用socket

#20


问题解决了

Byte[] data =Encoding.Default.GetBytes(message);

谢谢大家的帮忙!!

#21


还是编码问题,哎

#22


解决了?结贴。

#23


jf

#24


汗……………………………………
又碰到一个不结贴的!