2010-05-28 53 views
1

我有一个项目需要向网页发布250万字符的QueryString。服务器本身只解析了5,400个字符或更少的URI。努力了的WebRequest/WebResponse类,Web客户端,并接几个不同的代码集之后,我终于找到了下面的代码,解决我的问题:如何避免服务器错误414非常长的QueryString值

HttpWebRequest webReq; 
HttpWebResponse webResp = null; 
string Response = ""; 
Stream reqStream = null; 
webReq = (HttpWebRequest)WebRequest.Create(strURL); 

Byte[] bytes = Encoding.UTF8.GetBytes("xml_doc=" + HttpUtility.UrlEncode(strQueryString)); 
webReq.ContentType = "application/x-www-form-urlencoded"; 
webReq.Method = "POST"; 
webReq.ContentLength = bytes.Length; 
reqStream = webReq.GetRequestStream(); 
reqStream.Write(bytes, 0, bytes.Length); 
reqStream.Close(); 
webResp = (HttpWebResponse)webReq.GetResponse(); 

if (webResp.StatusCode == HttpStatusCode.OK) 
{ 
    StreamReader loResponseStream = new StreamReader(webResp.GetResponseStream(), Encoding.UTF8); 
    Response = loResponseStream.ReadToEnd(); 
} 

webResp.Close(); 
reqStream = null; 
webResp = null; 
webReq = null; 
+0

您正在混淆TCP协议和HTTP,这是一种更高级别的协议。没有更多的信息,就无法知道服务器的期望。它可能希望连接到TCP套接字并将文本数据直接写入套接字,或者可能需要HTTP POST。另外,您的示例URL是一个HTTPS,它需要一个加密的SSL套接字... – Peter 2010-05-28 04:43:55

+0

您确定它期待HTTP POST。我会谷歌加密SSL套接字和HTTP POST。 – 2010-05-28 14:32:42

回答

1

你并不需要手动使用套接字。您可以使用HttpWebRequest对象来处理套接字层。您可以在this other question上查看某些将发布文件的示例代码的答案。只需将目标网址更改为HTTPS网址即可使用SSL。

+0

我最初是从这种方法开始的,但是我从服务器收到414错误(URL太长)。我尝试了使用UploadString和DownloadString与WebClient,但这也返回了一个414.鉴于您的评论,我搜索了额外的WebRequest的例子,我发现一个工作。我将发布我在原始问题中实现的代码。 – 2010-05-30 15:34:23