Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何避免很长查询字符串值的服务器错误414_C#_Webrequest - Fatal编程技术网

C# 如何避免很长查询字符串值的服务器错误414

C# 如何避免很长查询字符串值的服务器错误414,c#,webrequest,C#,Webrequest,我有一个项目需要在网页上发布250万字符的查询字符串。服务器本身只解析5400个字符或更少的URI。在尝试了WebRequest/WebResponse、WebClient和Sockets的几组不同代码之后,我终于找到了以下解决问题的代码: HttpWebRequest webReq; HttpWebResponse webResp = null; string Response = ""; Stream reqStream = null; webReq = (HttpWebRequest)We

我有一个项目需要在网页上发布250万字符的查询字符串。服务器本身只解析5400个字符或更少的URI。在尝试了WebRequest/WebResponse、WebClient和Sockets的几组不同代码之后,我终于找到了以下解决问题的代码:

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;

您不需要手动使用套接字。您可以使用HttpWebRequest对象来处理套接字层。您可以在上看到一些将发布文件的示例代码的答案。只需将目标URL更改为HTTPS URL即可使用SSL。

您不需要手动使用套接字。您可以使用HttpWebRequest对象来处理套接字层。您可以在上看到一些将发布文件的示例代码的答案。只需将目标URL更改为HTTPS URL,即可使用SSL。

您将TCP协议和HTTP(更高级别的协议)混淆了。如果没有更多信息,就不可能知道服务器期望的是什么。它可能希望连接到TCP套接字并将文本数据直接写入套接字,也可能希望使用HTTP POST。此外,您的示例URL是HTTPS URL,这将需要一个加密的SSL套接字…正确的是,它需要一个HTTP POST。我会用谷歌搜索加密的SSL套接字和HTTP POST。你混淆了TCP协议和HTTP,后者是一种更高级别的协议。如果没有更多信息,就不可能知道服务器期望的是什么。它可能希望连接到TCP套接字并将文本数据直接写入套接字,也可能希望使用HTTP POST。此外,您的示例URL是HTTPS URL,这将需要一个加密的SSL套接字…正确的是,它需要一个HTTP POST。我将在谷歌上搜索加密的SSL套接字和HTTP POST。我最初使用这种方法,但我从服务器收到了一个414错误(URL太长)。我尝试在WebClient中使用UploadString和DownloadString,但这也返回了414。鉴于您的评论,我搜索了其他WebRequest示例,并找到了一个有效的示例。我将发布我在原始问题中实现的代码。我最初使用这种方法,但我从服务器收到一个414错误(URL太长)。我尝试在WebClient中使用UploadString和DownloadString,但这也返回了414。鉴于您的评论,我搜索了其他WebRequest示例,并找到了一个有效的示例。我将发布我在原始问题中实现的代码。