2011-04-05 44 views
2

我正在测试几个不同的公共RESTful API,每个不同的http参数值名称,但概念上的所有工作都是相似的。然而,这些公司都没有连接,因此它必定是我的最终目标。HttpWebRequest中的http参数值的大小是否有限制?

在.NET我在尝试获得HttpWebResponse如果出现以下错误:

消息: “服务器已提交协议违例科= ResponseStatusLine。”
状态:ServerProtocolViolation {11}

使用Fiddler,我发现返回的头文件不存在,并且这是问题的原因(甚至不存在且格式不正确):

HTTP/1.0 200这个越野车服务器没有返回标题

我发送的参数是一篇冗长的文本新闻文章。我已删除全部 puntuation,characters等只是确保没有任何干扰。我打造出来的文字使用StringBuilder中,然后创建URI象下面这样:

Dim sb As New StringBuilder 
sb.Append("&apiKey=" + HttpUtility.UrlEncode("123456789")) 
sb.Append("&inputText=" + HttpUtility.UrlEncode(Me.MyTestText)) 
Dim ApiHttpWebRequest As HttpWebRequest = CType(WebRequest.Create(New Uri(BaseRequestURL + sb.ToString.Trim())), HttpWebRequest) 
Dim ApiHttpWebResponse As HttpWebResponse = CType(ApiHttpWebRequest.GetResponse(), HttpWebResponse) 

此代码确实与我送它最文本工作。我发现的有趣的事情是,如果我缩短了我发送的文本,那么它就可以工作!我无法弄清楚究竟是还是断点。在HttpUtility.UrlEncode函数针对它运行之后,stringbuilders值展开。然而,文本的大小只有大约5-8千字节,远低于'httpWebRequest'.config设置所规定的任何大小限制,这些设置在MSDN 中由我正在使用的任何API所规定例如1个限制是150千字节的文本)。我甚至尝试在web.config中将所有这些值设置为“-1”,这意味着:“值为-1表示不会对响应标头施加大小限制。”

是否有http参数值或其他任何东西的大小限制我错过了会导致此?谢谢!

回答

2

以及典型的,当我发布一个问题,问题被吓到了,并提出解决方案;)

谢谢你的上一个链接,但因为我没在浏览器中直接执行此操作时,这些限制对我来说不是问题。

我正在使用HttpWebRequest的默认“方法”值是“GET”,我应该使用“POST”有几个原因,包括征服请求问题的长度。所以加入的代码以下行后创建Request对象,解决了该问题:

ApiHttpWebRequest.Method = "POST" 

此链接(旧,但内容仍持有)也有帮助:

什么是极限上QueryString/GET/URL参数?:
http://classicasp.aspfaq.com/forms/what-is-the-limit-on-querystring/get/url-parameters.html

...和从的TechNet一个很好的描述:

“GET方法,这是在前面的例子中所使用的,附加的名称/值对的URL不幸的是,长度的URL是有限的,所以这个方法只适用于只有少数参数的情况下,如果表单使用大量参数,或者参数包含大量数据,URL可能会被截断。 URL在浏览器的地址栏中可见,是显示密码的最佳位置。

GET方法的替代方法是POST方法。此方法将名称/值对包装在HTTP请求的正文中,这使得URL更清晰,并且不会在表单输出上施加大小限制。它也更安全。“

相关问题