Пятница, 26 Апреля 2024, 09:42

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Невозможно получить ответ через POST (GetResponse() error)
Невозможно получить ответ через POST
robertonoДата: Четверг, 02 Октября 2014, 18:24 | Сообщение # 1
Чокнутый Кот
Сейчас нет на сайте
В общем делал я значит одно приложение для одного сайта себе, делал в обычном Visual Studio, тестил через C# Windows Forms. Всё было ок.
Фреймворк использовал 3.5 как и в юнити, т.е. всё совпадает.
Перенес я значит это дело в юнити, новая сцена, скрипт с 3 GUI элементами, ну и соответственно код для авторизации. В случае с win forms всё отлично работает - что бы я не ввел, сервер мне всегда ответит. Но вот юнити мне кидает такую ошибку:

Exception: at System.Net.WebConnection.HandleError(WebExceptionStatus st, System.Exception e, System.String where)
at System.Net.WebConnection.ReadDone(IAsyncResult result)
Подробнее


Сам скрипт вы можете достать здесь, прошу всех кто открыл эту тему затестить скрипт. Это очень просто, просто добавьте его на камеру и включайте игру. Можно на новой сцене, без разницы. Вводите любой логин и пароль и нажимаете LOGIN.
И ещё когда я нажимаю LOGIN юнити повисает на 30 сек - 2 мин. С Standalone build тоже самое.
AuthGUI
API
Файл с API можете не добавлять на камеру, он статичный. Нужна только GUI.
Ошибка вылетает на строку
Код
HttpWebResponse getResponse = (HttpWebResponse)getRequest.GetResponse();

когда на Windows Forms всё было хорошо.

В чем прикол и как убрать ошибку?
Заранее большое спасибо!

P.S. Потом собираюсь билдить под Android. Я думал делать на Java (который вообще не знаю, так что я не уверен что переписал бы всё) я вспомнил что есть бесплатный андройд в юнити.

Добавлено (02.10.2014, 17:59)
---------------------------------------------
P.S.S. Ошибка появляется не при билде или запуске проекта, а именно в нажатие кнопки LOGIN (при этом юнити повисает на пару минут)

Добавлено (02.10.2014, 18:24)
---------------------------------------------
Обновление: Если проверять через try catch ошибка возвращает ReceiveFailure.
Ошибка так же описана [url=http://msdn.microsoft.com/ru-ru/library/ms346609(v=vs.110).aspx]здесь[/url] и там же её решения. Я попробовал сделать
Присвойте параметру HttpWebRequest.KeepAlive значение false.
Но ничего не получилось. Остальное проверю позже. Какие ещё есть идеи?

LertmindДата: Четверг, 02 Октября 2014, 20:10 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Ты бы сначала объяснил как обойти ошибку TlsException: Invalid certificate received from server.

Гугл говорит что-то про копирование сертификатов для Mono.
robertonoДата: Четверг, 02 Октября 2014, 20:25 | Сообщение # 3
Чокнутый Кот
Сейчас нет на сайте
Lertmind, а вот такое я вижу впервые..
Что находится у тебя на 49 - 51 строках в API ?

Попробуй для начала зайти на mykoob.lv и попробовать залогиниться (любыми данными, просто как проверка) через твой браузер.

Добавлено (02.10.2014, 20:25)
---------------------------------------------
ещё попробуй выключить антивирус и брендмауэр (думаю второе точно нужно вырубить). Я думаю брендмауэр блочит соединение. Возможно

LertmindДата: Четверг, 02 Октября 2014, 20:50 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
Антивир и брэндмауэр вроде не причём. Ошибка в System.Net.HttpWebRequest.GetResponse (), здесь об этом написано.

Добавлено (02.10.2014, 20:50)
---------------------------------------------
Добавил код в MykoobAPI.Auth:
Код
System.Net.ServicePointManager.ServerCertificateValidationCallback = (a, b, c, d) => { return true; };
Заработало. Теперь появляется ошибка как ты и описал.


Сообщение отредактировал Lertmind - Четверг, 02 Октября 2014, 20:57
robertonoДата: Четверг, 02 Октября 2014, 21:09 | Сообщение # 5
Чокнутый Кот
Сейчас нет на сайте
Цитата Lertmind ()
System.Net.ServicePointManager.ServerCertificateValidationCallback = (a, b, c, d) => { return true; };

Это добавлять в самом начале Auth ?
Я добавил себе просто, мало ли пригодиться.

Такс.. Что дальше делать теперь? Есть какие нибудь предложения?

Добавлено (02.10.2014, 21:09)
---------------------------------------------
А если мне заранее известно, что сервер ничего не вернет в ответ, то как так послать запрос?

LertmindДата: Четверг, 02 Октября 2014, 21:37 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
Цитата robertono ()
Это добавлять в самом начале Auth ?
Да. Совет здесь нашёл в самом низу. Я так понял это переопределяет проверку на сертификаты. На официальном сайте mono как вариант надо использовать moztools, который уже есть в MonoDevelop, но у меня не сработало.

Добавлено (02.10.2014, 21:37)
---------------------------------------------
Исправил твою первую ошибку: поставил в Auth
Код
getRequest.AllowAutoRedirect = false;// было true;

Не знаю почему, сравнивал код отсюда и наугад изменял.

Хотя наверно так не должно быть, потому что Info.Result равен Success.


Сообщение отредактировал Lertmind - Четверг, 02 Октября 2014, 21:42
robertonoДата: Четверг, 02 Октября 2014, 21:59 | Сообщение # 7
Чокнутый Кот
Сейчас нет на сайте
Lertmind, во! Я так и думал что тут редирект работает.. (код ещё не потестил, в радостях пишу сюда :D)
Если парсить сайт через Google Chrome то в авторизации никакого ответа не должно быть!
После авторизации всегда делается редирект. Отлично, я думаю проблема решена, сейчас проверю.

Добавлено (02.10.2014, 21:59)
---------------------------------------------
Lertmind, Всё, огромнейшее тебе спасибо! Неделю бился с этой фигней и всё таки надумал написать на форум)

Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Невозможно получить ответ через POST (GetResponse() error)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг