HttpWebRequest 接收"WebException: The request timed out"



在无休止的研究和对不同组合进行测试之后,我现在毫无头绪。

我只有在我的byteArraySystem.Text.Encoding.UTF8.GetBytes("")以外的其他内容填充时才会收到WebException: The request timed out。(例如" Hello")

服务器设置是Google Load Balancer的HTTPS-Request,它通过HTTP与后端进行通信。后端是带有php的Apache。

用于测试目的(自签名的SSL-CERT),我有:

System.Net.ServicePointManager.ServerCertificateValidationCallback = 
        delegate (object s,  
            System.Security.Cryptography.X509Certificates.X509Certificate certificate,  
            System.Security.Cryptography.X509Certificates.X509Chain chain, 
            System.Net.Security.SslPolicyErrors sslPolicyErrors){ 
        return true; 
    };
  • 如果我在网络浏览器(Chrome)中输入URL,我会得到答复。
  • 如果我使用Mozilla的HTTP-Requester(或者都没有内容发送),我将获得正确的响应数据(添加SSL-Security例外之后)
  • 如果我在下面使用System.Text.Encoding.UTF8.GetBytes("")运行代码,一切都有效(除了我无法发送数据并接收我想要的内容)

这是我正在使用的代码。

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("https://someurl.com/some.php");
webRequest.Proxy = null;
webRequest.Credentials = CredentialCache.DefaultCredentials;
webRequest.Method = "POST";
webRequest.Timeout = 3000;
byte[] byteArray = System.Text.Encoding.UTF8.GetBytes("someData");  //works if empty
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.ContentLength = byteArray.Length;
Stream postData = webRequest.GetRequestStream();
postData.Write(byteArray, 0, byteArray.Length);
postData.Close();
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); //ERROR MESSAGE
Stream dataStream = webResponse.GetResponseStream();
reader = new StreamReader(dataStream);
string data = reader.ReadToEnd(); //output data
reader.Close ();
dataStream.Close ();
webResponse.Close ();

确切的错误(顺便说一句,所有这些发生在Unity3D编辑器中):

WebException: The request timed out System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult) System.Net.HttpWebRequest.GetResponse ()

那么,为什么在地球上不起作用,一旦有东西,getrequeststream必须写?

谢谢,一切顺利,Kruegbert


.. ::附录

  • 如果我增加了超时,则需要更长的时间直到出现相同的味精为止。
  • 如果我写webRequest.ContentLength = byteArray.Length+1,我会收到一个响应,但这是一个WebException错误:ProtocolError
  • 如果我写webRequest.ContentLength = byteArray.Length-1,我得到ProtocolViolationException
  • 我已经尝试使用相同行为的try/catch/使用相同的尝试

我想出了为什么它不起作用 - 我仍然不知道为什么它是这样的。(也许是Unityeditor)

我添加了

webRequest.ProtocolVersion = HttpVersion.Version10;

一切都起作用。没有更多的超时错误。是的webRequest.ProtocolVersion = HttpVersion.Version11;导致超时错误。

但是,从网络中制作一个httprequest可以通过其中的任何一种来成功: HTTP/1.1HTTP/1.0 (with Host header)HTTP/1.0 (without Host header)

相关内容

  • 没有找到相关文章

最新更新