Потеряв два дня с этим вопросом (и пытаясь заставить его работать), я решил сделать шаг назад и задать более простой вопрос, потому что видимо, там что-то я не знаю, или я ошибаюсь.
Требования просты, мне нужно сделать HTTP-сообщение (передав несколько значений) по https с С#.
Веб-сайт (если заданы соответствующие значения) вернет несколько простых html и код ответа. (я покажу их позже).
Это действительно , что просто. Работает "webservice". У меня есть образец php, который работает и успешно соединяется с ним. У меня также есть приложение Dephi "demo" (с исходным кодом), которое также работает. И, наконец, у меня есть демо-приложение (двоичное) от компании, которая имеет "сервис", которая также работает, конечно.
Но мне нужно сделать это через С#. Это звучит так просто, он не работает.
В целях тестирования я создал простое консольное приложение и простой метод подключения. Я пробовал как 7 различных способов создать HTTP-запрос, все более или менее одно и то же, другую реализацию (с использованием WebClient, используя HttpWebRequest и т.д.).
Каждый метод работает, кроме, когда URI начинается с 'https'.
Я получаю webexception, говорящий, что удаленный сервер вернулся 404. Я установил Fiddler (как было предложено пользователем SO) и немного расследовал трафик. 404 состоит в том, что я передаю что-то неправильно, потому что, как я упоминал позже, работает "сервис". Я расскажу о результатах скрипача позже.
URL-адрес, где мне нужно отправить данные: 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.
Первый означает "ОК", а второй - "Ошибка при завершении".
Как вы видите, задача довольно проста, только она не работает. Если я использую скрипач, я вижу, что в связи с этим происходит какое-то соединение SSL, и тогда все работает нормально. Однако, насколько я читал,.NET обрабатывает все эти вещи для нас (да, я добавил обратный вызов, чтобы всегда проверять недействительные сертификаты). Я не понимаю, что я делаю неправильно. Я могу отправить/отправить код по электронной почте, но то, что я хотел бы знать, очень просто:
Как вы можете выполнить POST через SSL с помощью С# и "простого" HttpWebRequest, а затем получить ответ в строке/массиве/Что бы ни обрабатывалось?
Поверь мне, когда я скажу, что я работаю в поисковых системах и накладываю стопки на два дня. У меня нет прокси-сервера. Соединение проходит через мой маршрутизатор. Стандартные порты. Ничего особенного. Моя машина находится в виртуальной машине VMWare и является Windows Vista, но при условии, что примеры приложений (php, delphi, binary) работают без проблем, я не вижу в этом проблемы).
Различные образцы (без двоичного) доступны здесь, если кто-то хочет взглянуть на них.
Буду признателен за любую помощь. Если кто-то хочет попробовать с "настоящим" именем пользователя, у меня есть демонстрационный пользователь, и я могу передать вам пользователя/пароль для тестирования. У меня только один демонстрационный пользователь (тот, который они мне дали), и поэтому я не вставляю его здесь. Я не хочу наводнять пользователя тестами;)
Я пробовал (внутри образцов) с использованием UTF8 и ASCII, но это ничего не меняло.
Я на 100% уверен, что есть что-то, что я должен делать с SSL, и я не делаю этого, потому что я не знаю об этом.
Спасибо в advance.
Мартин.