как запросить защищенный URL https с .net, как https://example.com/send.aspx?msg=hi - PullRequest
0 голосов
/ 13 ноября 2010

Я искал SO и google и видел при этом только проблемы, к сожалению для меня, мой URL является частью системы текстовых сообщений Banks, и все, что у меня есть, это защищенный URL. Я должен написать тест, чтобы протолкнуть сообщение, но так как я не подключен к локальной сети банков, я не могу проверить или выполнить какие-либо следы и ошибки.

URL выглядит так:

https://example.com/send.aspx?msg=hi

Я использую приложение Windows Forms .net4 в C #.

Как выполнить POST с указанным выше URL-адресом, используя WebClient, или есть другой способ.

Я полагаю, что из других ответов мне нужен сертификат от сотрудников банка или есть варианты отказаться от использования шифрования.


Обновление Круто, спасибо Евгению, я почти там. Я использовал веб-клиент, как этот ответ он не работал. Я изменил свой код на это, и это сработало:

static void Main(string[] args)
{
    ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(allowCert);
    string url = "https://example.com/send.aspx?msg=hi";
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    Stream resStream = response.GetResponseStream();
    StreamReader st = new StreamReader(resStream);
    Console.WriteLine(st.ReadToEnd());
    Console.ReadKey();
}

static bool allowCert(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error)
{
    return true;
}

Бонусные баллы теперь за то, почему он работал таким образом и что делает этот код? (Он говорит: «Мне все равно, что разрешает сертификат»)

Ответы [ 2 ]

1 голос
/ 15 ноября 2010

Не совсем понятно, о чем вы просите в обновлении вашего вопроса.

HttpWebRequest специально предназначен для того, чтобы вы могли делать запросы GET / POST / PUT / etc к удаленному серверу.

Обратный вызов allowCert просто говорит .Net не беспокоить проверку цепочки сертификатов. Существует несколько причин, по которым сертификат не будет проверен, в том числе устаревший или один из сертификатов в цепочке устарел. Другая причина в том, что центр сертификации не доверяет машине, выполняющей вызов. Что вполне возможно, если банк выпустил свой собственный сертификат без использования хорошо известного ЦС для его поддержки.

Лично я бы не стал доверять сертификату, который не может быть подтвержден. Если это чисто для тестирования, все должно быть в порядке; однако, если это производственный сертификат, я бы начал об этом говорить в банке. К сожалению, многие банки, похоже, не понимают безопасность.

1 голос
/ 13 ноября 2010

ЕСЛИ вышеперечисленное - это все, что вам дали, тогда вам не нужно POST. Такой запрос выполняется методом GET (описан здесь) . Вы помещаете сообщение вместо «Привет» в вашем образце. Помните, что вам нужно закодировать текст сообщения, чтобы «замаскировать» любые «небезопасные» символы, которые могут быть неверно истолкованы. Лучше всего заменить любой не алфавитно-цифровой символ его шестнадцатеричным кодом в форме% xx, где xx - две цифры шестнадцатеричного кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...