经过对不同组合的无休止的研究和测试,我现在一无所知。
只有当我的WebException: The request timed out
被byteArray
以外的其他内容填满时,我才会收到System.Text.Encoding.UTF8.GetBytes("")
。 (比如"你好")
服务器设置是对Google Load Balancer的https请求,后者通过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;
};
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
答案 0 :(得分:1)
我想通了,为什么它不起作用 - 我仍然不知道为什么它会像这样。 (也许是UnityEditor的事情)
我添加了
webRequest.ProtocolVersion = HttpVersion.Version10;
一切正常。没有更多的超时错误。是的webRequest.ProtocolVersion = HttpVersion.Version11;
会导致超时错误。
但是,通过网络发布HttpRequest会成功:HTTP/1.1
,HTTP/1.0 (with Host header)
,HTTP/1.0 (without Host header)