Потратив два дня на этот вопрос (и пытаясь заставить его работать), я решил сделать шаг назад и задать более простой вопрос, потому что, очевидно, есть кое-что, чего я не знаю или я делаю неправильно.
Требования просты, Мне нужно сделать HTTP-пост (с передачей нескольких значений) через https из C #.
Веб-сайт (при наличии соответствующих значений) вернет простой HTML и код ответа. (я покажу это позже).
Это действительно , что просто. «Вебсервис» работает. У меня есть пример PHP, который работает и успешно подключается к нему. У меня также есть демо-приложение Dephi (с исходным кодом), которое также работает. И, наконец, у меня есть демонстрационное приложение (бинарное) от компании, которая имеет «сервис», который также работает, конечно.
Но мне нужно сделать это через C #. То, что звучит так просто, это не работает.
Для целей тестирования я создал простое консольное приложение и простой метод подключения. Я пробовал 7 разных способов создания HTTP-запроса, все более или менее одинаково, разные реализации (использование WebClient, использование HttpWebRequest и т. Д.).
Каждый метод работает, , кроме , когда URI начинается с «https».
Я получаю исключение, в котором говорится, что удаленный сервер вернул 404. Я установил Fiddler (как предложил пользователь SO) и немного исследовал трафик. 404 - потому что я пропускаю что-то не так, потому что, как я упоминал позже, «сервис» работает. О результатах скрипача я расскажу позже.
URL-адрес, где я должен POST данные: https://servicios.mensario.com/enviomasivo/apip/
И это данные POST: (значения являются подделками)
= SomeUser Новичок & клаве = SomePassword & nserie = 01234567890123456789 & версия = 01010000 & Operacion = 220
Сервер может вернуть ответ в две / три строки (извините за испанский, но компания из Испании). Вот пример возможного ответа:
HTTP/1.1 200 OK
Content-Type: text/plain
01010000 100 BIEN
998
А вот еще
HTTP/1.1 200 OK
Content-Type: text/plain
01010000 20 AUTENTIFICACION NEGATIVA
Ha habido un problema en la identificación ante el servidor. Corrija sus datos de autentificacion.
1-й означает «ОК», а 2-й - «Отказ аутентификации».
Как видите, задача довольно простая , только она не работает. Если я использую fiddler, я вижу, что в соединении происходит что-то вроде SSL, а затем все работает нормально. Однако, насколько я читал, .NET обрабатывает все эти вещи для нас ( да, я добавил обратный вызов, чтобы всегда проверять недействительные сертификаты ). Я не понимаю, что я делаю не так. Я могу опубликовать / отправить код по электронной почте, но то, что я хотел бы знать, очень просто:
Как сделать POST поверх SSL с использованием C # и «простого» HttpWebRequest, а затем получить ответ в виде строки / массива / Что бы ни обрабатывалось?
Поверь мне, когда я скажу, что я гуглю и переполняюсь стеком в течение двух дней. У меня нет никакого прокси. Соединение проходит через мой роутер. Стандартные порты. Ничего фантастического. Моя машина находится внутри виртуальной машины VMWare и работает под управлением Windows Vista, но, учитывая, что примеры приложений (php, delphi, binary) работают без проблем, я не вижу в этом проблемы).
Различные образцы (без двоичного кода) доступны здесь , если кто-то хочет взглянуть на них.
Буду признателен за любую помощь. Если кто-то захочет попробовать «настоящее» имя пользователя, у меня есть демонстрационный пользователь, и я могу передать вам пользователя / пройти для целей тестирования. У меня есть только один демонстрационный пользователь (тот, которого они мне дали), и поэтому я здесь его не вставляю. Я не хочу заливать пользователя тестами;)
Я пытался (в примерах) использовать UTF8 и ASCII, но это ничего не изменило.
Я на 100% уверен, что что-то связано с SSL, и я не делаю этого, потому что не знаю об этом.
Спасибо за заранее .
Мартин.