Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/40: Рейтинг темы: голосов - 40, средняя оценка - 4.95
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 256

POST авторизация на форуме и скачивание файла

29.03.2012, 16:04. Показов 7960. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача: авторизоваться на форуме и скачать с него файл.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
            string addr = "http://4pda.ru/forum/index.php?act=Login&CODE=00";
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(addr);
 
            req.Method = "POST";
            req.KeepAlive = true;
            req.UserAgent = @"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.83 Safari/535.11";
            req.Accept = @"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            req.Headers.Add(HttpRequestHeader.AcceptLanguage, @"ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
            req.Headers.Add(HttpRequestHeader.AcceptEncoding, @"gzip,deflate,sdch");
            req.Headers.Add(HttpRequestHeader.AcceptCharset, @"Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3");
            req.Headers.Add(HttpRequestHeader.Te, @"deflate, gzip, chunked, identity, trailers");
 
            //посылаем в форму строку data
            req.ContentType = "application/x-www-form-urlencoded";
            Stream newStream = req.GetRequestStream();
            UTF8Encoding encoding = new UTF8Encoding();
            //ASCIIEncoding encoding = new ASCIIEncoding();
            string data = "UserName=1111&PassWord=2222&CookieDate=1";
            byte[] buff = encoding.GetBytes(data);
            newStream.Write(buff, 0, data.Length);
            newStream.Close();
            
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            Encoding _responseEncoding = Encoding.GetEncoding(resp.CharacterSet);
            StreamReader sr = new StreamReader(resp.GetResponseStream(), _responseEncoding);
            string htmlText = sr.ReadToEnd();
            File.WriteAllText(@"c:\1.txt", htmlText);            
            resp.Close();   
 
            WebClient wc = new WebClient();
            wc.DownloadFile("http://4pda.ru/forum/dl/post/1495194/DragonCraft.apk", @"c:\1.apk");
wireshark'ом перехватил пакет, вот часть его содержимого

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Hypertext Transfer Protocol
    POST /forum/index.php?act=Login&CODE=01 HTTP/1.1
    Host: 4pda.ru
    Connection: keep-alive
    Content-Length: 98
    Cache-Control: max-age=0
    Origin: [url]http://*****[/url]
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.83 Safari/535.11
    Content-Type: application/x-www-form-urlencoded
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Referer: [url]http://*****/forum/index.php?act=Login&CODE=00[/url]
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
    Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3
    [truncated] Cookie: modtids=; modpids=; ngx_mb=0; __utma=2980533.873172304.1320098106.1332714024.1332970034.5; __utmc=2980533; __utmz=2980533.1320098106.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); topicsread=a%253A5%253A%257Bi%253A1
 
    [Full request URI: [url]http://****/forum/index.php?act=Login&CODE=01][/url]
Line-based text data: application/x-www-form-urlencoded
    referer=http%3A%2F%****%2Fforum%2Findex.php%3F&UserName=****&PassWord=****&CookieDate=1
вопросы:
1. Правильно ли я авторизируюсь? в файл сохраняется бессмысленный набор символов.
2. Могу ли я начинать скачивать файл сразу после авторизации используя webclient? постоянно вылезает ошибка 404 (в данном случае это попытка скачивания файла без авторизации)
3. Если не правильно, хотелось бы, чтоб мне указали на мои ошибки.

Заранее благодарю

Добавлено через 2 часа 58 минут
Немного исправил вариант, но всеравно не работает.
В чем может быть дело?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
string addr = "http://4pda.ru/forum/index.php?act=Login&CODE=01";
            string data = "http://4pda.ru/forum/index.php?&UserName=****&PassWord=****&CookieDate=1";
            UTF8Encoding encoding = new UTF8Encoding();
            byte[] buff = encoding.GetBytes(data);            
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(addr);
 
            req.Method = "POST";
            req.KeepAlive = true;
            req.ContentLength = buff.Length;
            req.UserAgent = @"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.83 Safari/535.11";
            req.Accept = @"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            req.Headers.Add(HttpRequestHeader.AcceptLanguage, @"ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
            req.Headers.Add(HttpRequestHeader.AcceptEncoding, @"gzip,deflate,sdch");
            req.Headers.Add(HttpRequestHeader.AcceptCharset, @"Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3");
 
            CookieContainer cookies = new CookieContainer();
            req.CookieContainer = cookies;
 
            req.ContentType = "application/x-www-form-urlencoded";
            Stream newStream = req.GetRequestStream();            
            newStream.Write(buff, 0, data.Length);
            newStream.Close();
            
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            Encoding _responseEncoding = Encoding.GetEncoding(resp.CharacterSet);
            StreamReader sr = new StreamReader(resp.GetResponseStream(), _responseEncoding);
            string htmlText = sr.ReadToEnd();
            File.WriteAllText(@"c:\1.txt", htmlText);
            resp.Close();   
 
            WebClient wc = new WebClient();
            wc.DownloadFile("http://4pda.ru/forum/dl/post/1495194/DragonCraft.apk", @"c:\1.apk");
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.03.2012, 16:04
Ответы с готовыми решениями:

Авторизация на форуме, метод POST
Привет, помогите сделать авторизацию на форуме. И если вошел то выполнить какое-то действие, а точнее одной переменной присвоить логин...

Авторизация на сайте и скачивание файла по https
Доброго времени суток, помогите решить задачу уже неделю бьюсь над ней никак не получаеться :( Суть простая - есть сайт - на нём нужно...

Скачивание файла с сервера FileResult Ajax POST
Есть контроллер с action: public FileResult GetFile(string Language) { string file_path =...

4
774 / 554 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
29.03.2012, 16:38
C#
1
req.Headers.Add(HttpRequestHeader.AcceptEncoding, @"gzip,deflate,sdch");
Тут вы указываете что ответ должен приходить в компрессионном виде
Цитата Сообщение от fgtmenow Посмотреть сообщение
в файл сохраняется бессмысленный набор символов.
Добавьте это
C#
1
req.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
должно помочь
0
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 256
29.03.2012, 19:34  [ТС]
да, об этом я даже и не думал) думал в алгоритме беда) спасибо


теперь вопрос, как, авторизировавшись скачать файл?
Если я просто пытаюсь это сделать через client.DownloadFile или client.DownloadFileAsync - выдается ошибка 404.

Сейчас попробую через GET запрос все оформить.
0
774 / 554 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
29.03.2012, 19:47
Самое главное после авторизации это куки ,их надо включать во все последующие запросы ,будь то WebClient или HttpWebRequest
0
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 256
29.03.2012, 21:09  [ТС]
Огромное спасибо ответившему человеку. Итак, это рабочая версия авторизации на сайте, и применение cookies к webclient для скачивание файла, доступного только после авторизации.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System.Net;
using System.IO;
 
            string username = "****";
            string password = "*****";
            string loginAdress = "http://4pda.ru/forum/index.php?act=Login&CODE=01";
            string authString = "http://4pda.ru/forum/index.php?&UserName=" + username + "&PassWord=" + password + "&CookieDate=1";
            Uri CookieHostname = new Uri("http://4pda.ru");
            UTF8Encoding encoding = new UTF8Encoding();
            byte[] buffer = encoding.GetBytes(authString);
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(loginAdress);
            request.Method = "POST";
            request.KeepAlive = true;
            request.ContentLength = buffer.Length;
            request.UserAgent = @"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.83 Safari/535.11";
            request.Accept = @"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            request.Headers.Add(HttpRequestHeader.AcceptLanguage, @"ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
            request.Headers.Add(HttpRequestHeader.AcceptEncoding, @"gzip,deflate,sdch");
            request.Headers.Add(HttpRequestHeader.AcceptCharset, @"Accept-Charset: utf-8;q=0.7,*;q=0.3");
            request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
            CookieContainer cookie = new CookieContainer();
            request.CookieContainer = cookie;
            request.ContentType = "application/x-www-form-urlencoded";
            Stream newStream = request.GetRequestStream();
            newStream.Write(buffer, 0, authString.Length);
            newStream.Close();
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            CookieCollection cookies = new CookieCollection();
            cookies = response.Cookies;
            Encoding responseEncoding = Encoding.GetEncoding(response.CharacterSet);
            StreamReader strReader = new StreamReader(response.GetResponseStream(), responseEncoding);
            string htmlText = strReader.ReadToEnd();
            response.Close();
            cookie.Add(CookieHostname, cookies);
 
            WebClient wc = new WebClient();
            wc.Headers.Add("Cookie", cookie.GetCookieHeader(CookieHostname));
            Uri uri = new Uri("http://4pda.ru/forum/dl/post/1495194/DragonCraft.apk");
            wc.DownloadFile(uri, @"c:\1.apk");
Тему можно закрывать.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.03.2012, 21:09
Помогаю со студенческими работами здесь

Авторизация на нашем форуме
привет всем) может кто нибудь показать пример авторизации на нашем форуме на синапсе!

phpBB Единая авторизация на сайте и форуме
Моя задача объединить сайт и форум, регистрацию и все функции с пользователями я уже сделал, застрял на авторизации. Механизм авторизации...

Авторизация на форуме - как реализовать?
Если не сложно дайте пример кода для авторизации на форуме - что бы я посмотрел как оно выглядит... нужно что бы пользователь ввел логин...

Авторизация на форуме посредством Invoke-WebRequest
Добрый день всем! Никак не получается авторизоваться на форму через командлет Invoke-WebRequest. В скрипте прописываю: $rs =...

Авторизация на форуме через сторонний браузер
Доброго дня. Вопрос новичка, вопрос который уже верояттно всем надоел, но перечитав форум, я так и не нашел то что мне нужно. Везде...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru