Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2016, 17:06   #1
GoodMann
 
Регистрация: 23.01.2016
Сообщений: 6
По умолчанию Авторизация POST

Добрый день, форумчане. Скажу сразу с Web я на "ВЫ". Так что попрошу не закидывать всякими оскорблениями. Пишу в vs на С# код для авторизации на сайте avito.ru. Вот сам код:

Код:
 var request = (HttpWebRequest)WebRequest.Create("https://www.avito.ru/profile/login");

   

            var postData = "-----------------------------156373061624270\n";
postData += "Content-Disposition: form-data; name=\"next\"\n";
            postData += "\n";
            postData += "/profile\n";
            postData += "-----------------------------156373061624270\n";
postData += "Content - Disposition: form-data; name= \"login\"\n";
            postData += "\n";
            postData += "mail@mail.ru\n";
            postData += "-----------------------------156373061624270\n";
            postData += "Content - Disposition: form-data; name= \"password\"\n";
            postData += "\n";
            postData += "passwd\n";
            postData += "-----------------------------156373061624270--\n";


            var data = Encoding.ASCII.GetBytes(postData);

            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = data.Length;

            using (var stream = request.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }

            var response = (HttpWebResponse)request.GetResponse();
И при выполнении выскакивает исключение
Удаленный сервер возвратил ошибку: (403) Запрещено

Подскажите, пожалуйста, где касяк.

Последний раз редактировалось GoodMann; 23.01.2016 в 17:16.
GoodMann вне форума Ответить с цитированием
Старый 23.01.2016, 17:24   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Запрос странный. Во-первых это multipart/form-data (причем вроде некорректный https://www.w3.org/TR/html401/intera...ml#h-17.13.4.2), а не application/x-www-form-urlencoded, но вряд ли он тут нужен, обычно это для отправки файлов и т.п., а не обычных строк с данными для входа.

Берите любой HTTP снифер (Fiddler или по F12 в любом браузере) и смотрите что отправляется.

И еще на авито вроде замороченная защита от ботов, так что это не самый простой сайт для автоматизации.

Как минимум стоит не забывать ставить referer, и выполнить обычный GET запрос(ы) для получения куков и т.п. перед авторизацией.

Цитата:
Скажу сразу с Web я на "ВЫ".
Ну дык либо изучай веб (начиная с HTTP и т.п.), либо закажи во фрилансе
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 23.01.2016, 18:09   #3
GoodMann
 
Регистрация: 23.01.2016
Сообщений: 6
По умолчанию

Да, действительно multipart/form-data; boundary=---------------------------171192860911083. Забыл поменять, но с ним все равно та же беда. А через сниффер я этот post вообще поймать не могy.

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Ну дык либо изучай веб (начиная с HTTP и т.п.), либо закажи во фрилансе
Я для себя стараюсь освоить .NЕT, поэтомy фриланс отпадает.

Через элемент WеbBrowsеr все работает. Но там дюже много лишнего трафика (прогрyзка ненyжных элементов) + трата времени на поиск нyжного в тэгах, поэтомy пытаюсь написать через WebRequest.

Последний раз редактировалось GoodMann; 23.01.2016 в 18:11.
GoodMann вне форума Ответить с цитированием
Старый 23.01.2016, 18:19   #4
GoodMann
 
Регистрация: 23.01.2016
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
выполнить обычный GET запрос(ы) для получения куков и т.п. перед авторизацией.
Yточните, пожалyйста, а разве кyки не после авторизации приходят. Я просто смотрел примеры авторизации и там кyки полyчали после POST запроса. Я так понял они приходят в ответ на этот запрос.
GoodMann вне форума Ответить с цитированием
Старый 23.01.2016, 18:27   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
написать через WebRequest.
WebClient проще.
https://msdn.microsoft.com/en-us/lib...vs.110%29.aspx

Только там куков почему-то нет по умолчанию, но это легко исправить. Вот простой наследник с CookieContainer'ом и еще парой мелочей https://gist.github.com/AlexP11223/e814a5ef8e741ead1632 (сам сохраняет и отправляет куки)

У вас кстати тоже CookieContainer'а нет.

Цитата:
А через сниффер я этот post вообще поймать не могy.
Ну без этого никак, разбирайся почему не ловится.

Там вроде небольшая защита от открытия F12 в виде постоянного срабатывания брекпоинта в цикле (и при отключении их почему-то зависло вообще)
Но Фиддлер все ловит нормально


И да, там таки multipart/form-data

Если что я говорил о просмотре запросов на самом сайте (отправляемых браузером).
А чтоб запросы программы поймать (для сравнения) вроде надо адрес прокси Фиддлера указать.

Цитата:
Yточните, пожалyйста, а разве кyки не после авторизации приходят
В любых запросах могут приходить. И даже Javascript'ом ставиться.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 23.01.2016 в 18:50.
Alex11223 вне форума Ответить с цитированием
Старый 23.01.2016, 18:47   #6
GoodMann
 
Регистрация: 23.01.2016
Сообщений: 6
По умолчанию

Большое спасибо за ответ.

Темy я пока закрывать не бyдy, так как вопрос авторизации через WebRequest еще не решен. Посижy еще поразбираюсь, если получится, то выложy код.


Кстати, редактор предложил мне вместо "посижy" - "пососи" Мне кажется, он меня презирает
GoodMann вне форума Ответить с цитированием
Старый 23.01.2016, 18:50   #7
GoodMann
 
Регистрация: 23.01.2016
Сообщений: 6
По умолчанию

Через FF точки основа не срабатывают и post запрос корректно отображается. А в Opеrе и Googlе Chromе y меня тоже не полyчается этот запрос отловить.
GoodMann вне форума Ответить с цитированием
Старый 23.01.2016, 19:00   #8
GoodMann
 
Регистрация: 23.01.2016
Сообщений: 6
По умолчанию

boundary=---------------------------171192860911083

Это, я так понял, какой то идентификатор. Но на странице его нет. Он с помощью скрипта может запрашиваться?
GoodMann вне форума Ответить с цитированием
Старый 23.01.2016, 19:06   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Говорю ж, читайте про НТТР

http://www.ietf.org/rfc/rfc2388.txt
https://www.w3.org/TR/html401/intera...ml#h-17.13.4.2
Цитата:
A "multipart/form-data" message contains a series of parts ... Part boundaries should not occur in any of the data; how this is done lies outside the scope of this specification.
Просто значение для разделения данных это.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Авторизация на сайте. POST - запрос krabich Общие вопросы .NET 17 09.12.2015 15:25
Авторизация m.vk.com через POST не получается mister-bulb Работа с сетью в Delphi 10 25.06.2012 22:10
Авторизация на UCOZ с idHTTP.Post Stalkker247 Работа с сетью в Delphi 15 14.03.2012 13:34
Авторизация на vbulletin (POST) IndomiX Работа с сетью в Delphi 10 19.02.2012 21:11
Post авторизация fenix19910 C# (си шарп) 0 21.07.2011 21:05