Отправка запроса POST:Исключение System.Net.WebException
-
05-07-2019 - |
Вопрос
Это не первый раз, когда я использую этот метод для отправки POST-запроса, и у меня никогда не возникало никаких проблем:
public static Stream SendPostRequest(Uri uri, byte[] postData)
{
var request = WebRequest.Create(uri);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postData.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(postData, 0, postData.Length);
requestStream.Close();
return request.GetResponse().GetResponseStream();
}
По запросу.GetRequestStream() я получаю исключение System.Net.WebException:Базовое соединение было закрыто:При отправке произошла непредвиденная ошибка.
Что еще более интересно, это отлично работает на некоторых машинах, но не работает на моей машине (Windows 7 Beta) и рабочем сервере (Windows Server 2008).Дополнительная информация:
Работает - Windows Xp - .NET 2.0
Работает - Windows Xp - .NET 3.5
Работает - Windows Server 2003 - .NET 3.0
Не работает - Windows Vista - .NET 3.5
Не работает - Windows Server 2008 - .NET 3.5
Не работает - Бета-версия Windows 7 - .NET 3.5 SP1
Пытался:
- Куча всякой всячины из здесь, ничего не помогло.
- Используя Веб - клиент, ничего не изменилось.
- Настройка этих Опции, но не заметил никакой заметной разницы.
- Пытался Проволочная метка.Очень хороший инструмент.
[Решено.Вроде того]
Я забыл упомянуть, но Uri был https...Я попробовал http, и это сработало.Не могу поверить, что я не попробовал этого раньше...
Тем не менее, я был бы признателен, если бы кто-нибудь пролил свет на всю эту ситуацию.
Решение
Мой первый план атаки состоял бы в том, чтобы использовать Проволочная метка чтобы увидеть, что происходит на сетевом уровне в каждом конкретном случае.Посмотрите, что отправляет каждая машина.
Кроме того, вы заметили различия между операционными системами, но установлена ли у всех них одна и та же версия .NET (вплоть до SP)?
Другие советы
Есть ли у вас работа?Возможно, это проблема с настройкой прокси-сервера (proxycfg
и т.д.).
Кроме того, чтобы упростить ситуацию (уменьшить количество неизвестных), рассмотрите возможность использования WebClient
чтобы сделать пост:
using (WebClient client = new WebClient())
{
client.Headers.Add("content-type","application/x-www-form-urlencoded");
client.UploadData(address, data);
// or more simply
client.UploadValues(address, nameValuePairs);
}
Попробуйте настроить один или несколько из следующих параметров:
- Отправленный выброшенный
- Разрешить автоматическое перенаправление
- Кодирование передачи
Также постарайтесь отметить различия между ними в ваших различных конфигурациях.