После бесконечных исследований и тестирования различных комбинаций, я сейчас не знаю.HttpWebRequest получает «WebException: время ожидания запроса»
Я получаю WebException: The request timed out
, только если я мой byteArray
заполняется чем-то еще чем System.Text.Encoding.UTF8.GetBytes("")
. (Например, «привет»)
Настройка сервера - это https-запрос к балансировщику загрузки Google, который связывается с бэкэнд через HTTP. Бэкэнд - это Apache с PHP.
Для целей тестирования (самозаверяющими 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;
};
- Если я ввожу URL в моем веб-браузере (Chrome), я получаю ответ.
- Если я использую HTTP-запрашивающий от Mozilla с или без содержания для отправки, я получаю правильные данные ответа (после добавления исключения SSL-Security)
- Если я запускаю мой код ниже с
System.Text.Encoding.UTF8.GetBytes("")
все работает (кроме I не может отправлять данные и, следовательно, получать то, что я хочу)
Вот код, который я использую.
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/улова/используя полученный таким же поведением
Просто, чтобы быть уверенным, надеюсь, вы пробовали 'webRequest.ContentLength = byteArray.Length'. –
Да, да. Впоследствии я просто экспериментировал с этим. – Kruegbert