Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
3 / 3 / 0
Регистрация: 22.11.2019
Сообщений: 55

Достать RequestHeaders

28.07.2020, 11:18. Показов 1065. Ответов 4

Студворк — интернет-сервис помощи студентам
Всем привет, пишу программу стягивания файлов с сайта.
Какой сайт, к сожалению, сказать не могу.
Для стягивания необходима авторизация, иначе выдает вот такую ошибку:
Code
1
{"code":3,"error":"Auth error","msg":"Please login first~","total":0,"pager":0,"records":0,"rows":null}
авторизация проходит по Post запросу
/login?txtUser=ЛОГИН&txtPassword=ПАРОЛЬ
Файлы стягиваются по такой ссылке
/ajax/system/dataselect?type=item_excelport&stype=1&u serid=9999&name=&itemid=&sday=&eday=&con fig_id=99999&menu_id=9999&op_type=item_e xcel
на выходе получается файл.
На данный момент реализованно так:
Я ручками захжу на сайт, логинюсь (посути автологин по ссылке). Затем открываю NetWork, там беру любой файл -> Request Headers -> Cookie и беру строчку с кеш данными.
Затем эти данные вставляю в textBox и при ссылке на файл делаю вот так:
C#
1
2
3
4
WebClient webClient = new WebClient();
webClient.Headers.Add("Cookie", cache);
textBox1.Text = link;
webClient.DownloadFile(link,"АДРЕС"
Возникает вопрос, как мне взять нужные мне куки автоматически.
Пробовал через xNet\HttpWebRequest, но когда вызываю страницу с логином, вероятно она не логинится, и куки, которые я получаю - не те.
Если вызывать через webBrowser, то он логинится, но как достать куки с него.
Желательно без перехвата пакетов данных.
Заранее спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.07.2020, 11:18
Ответы с готовыми решениями:

достать БД
у меня на компе стоял денвер, а потом что-то случилось и он не хочет запускатся.... там есть несколько, не столь важных, но хотелось бы...

Достать число
<div><mod>1,2,3,3,5,6,7,,1,3,4,1,,1,2,7,8</mod></div> Число символов и их положение не изменяется, изменяется только их значение, все...

Достать звук
Всем добрый вечер, такая проблемма как достать милодию из темы для телефона ??? http://allnokia.ru/themes/theme-10882-1.htm вот тема!!!

4
800 / 583 / 207
Регистрация: 21.02.2019
Сообщений: 2,095
28.07.2020, 17:07
... кроме самого запроса при логине есть еще заголовки, отправляемые браузером (напр. UserAgent - но это не обязательно) .. посмотрите полные заголовки запроса из браузера и подставьте их в WebClient ... как вариант, хотя могут быть и другие ограничения на сайте ...
1
3 / 3 / 0
Регистрация: 22.11.2019
Сообщений: 55
29.07.2020, 10:49  [ТС]
Нет, к сожалению в xNet я отправлял userAgent, но все так же.
Может тут будет какая-нибудь подсказка

Вот что я получаю по выполнению этого кода:
C#
1
2
3
4
WebRequest request = WebRequest.Create("{айпи}/login#?txtUser=логин&txtPassword=пароль");
WebResponse response = request.GetResponse();
Stream stream = response.GetResponseStream();
LogAdd(response.Headers.ToString());
Code
1
2
3
4
5
6
7
8
9
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: {какой-то айпи}
Access-Control-Allow-Headers: X-HTTP-Method-Override, Origin, Accept-Language, Accept-Encoding, X-Forwarded-For, Connection, Accept, User-Agent, Host, Referer, Cookie, Content-Type, Cache-Control, *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Connection: keep-alive
Transfer-Encoding: chunked
Date: Wed, 29 Jul 2020 01:30:15 GMT
Set-Cookie: gmp:session=s%3AEvVBFr7d9CLZio5QWWeMlW2ylCLsdxe6.kejvKlNwf6vn6N9mjQmRfzgiDdvfS5uFZf0P4dpUP1c; Path=/; Expires=Wed, 05 Aug 2020 01:30:15 GMT; HttpOnly
X-Powered-By: Express
Вот этот gmp:session код я и использую, но он не верен. Должен заметить, что у него стоит Set-Cookie.
Если зайти на сайт через браузер и глянуть headers любого файла (пусть то картинка / скрипт, файлы переменных) то в разделе Request Headers лежит вот это
Code
1
2
3
4
5
6
7
8
9
10
Accept: image/webp,image/apng,image/*,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru,en;q=0.9,zh;q=0.8,pt;q=0.7
Connection: keep-alive
Cookie: gmp:session=s%3A_VGsT53f-lSJuKjfVAmMwULTG52ucQeo.TUM7cSCqnaRf6eXaz8YVQuFabAwb6QTzbzEZHSEqqGQ; name=
Host: {айпишка}
If-Modified-Since: Tue, 18 Jul 2017 11:33:26 GMT
If-None-Match: W/"2ba5-576330858"
Referer: http://{айпи}/plugins/zTree/zTreeStyle.css
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 YaBrowser/20.7.2.115 Yowser/2.5 Safari/537.36
Кстати, вот что я заметил, мой gmp:session до логина на сайт (не работает программа с таким) и после одинаков (а тут уже работает с тем же gmp:session). Вероятно сказываются мои не знания в этой теме, возможно я не передаю мою сессию, а мне нужно передать ее на сайт, чтобы он ее зарегистрировал. Пойду пока посмотрю как это работает, может что-то нарою.
Но если у вас будут какие-то подсказки, прошу поделиться =)

Добавлено через 30 минут
Спасибо за наводку, да, была проблема в том, что я не передавал свою сессию на сайт. Реализовал таким способом.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using (var request = new HttpRequest())
            {
                string content;
               
                var getting_new_coockie = new HttpRequest(); //чисто чтобы получить новую сгенерированную куку. хз можно ли пихать туда рандомные значения, поэтому так.
                request.Cookies = new CookieDictionary()
                    {
                        {"Cookie", getting_new_coockie.Post("http://{айпи}/login/?txtUser={логин}&txtPassword={пароль}").Cookies.ToString()},
                    };
                request.KeepAlive = true;
                request.UserAgent =  Http.ChromeUserAgent();
                LogAdd(request.Post("http://{айпи}/login/?txtUser={логин}&txtPassword={пароль}").Cookies.ToString());
 
                try
                {
                    content = request.Get("http://{айпи}/ajax/system/dataselect?type=item_excelport&stype=1&userid=xx&name=&itemid=&sday=&eday=&config_id=xx&menu_id=xx&op_type=item_excel").ToString();
                }
                catch { content = "ERROR"; }
 
                LogAdd(content);
            }
почему-то лог у меня выдает 2 куки, вероятно один из них тот, который передаю я, второй новый?
Code
1
Cookie=gmp:session=s%3A3eez1KSGlpFA-ZkVTzblpVEe6WsTxQqT.LbzYXm5x4zotglyYGUaDyUC6IyyO%2FCWgVGJYIIFbvps; gmp:session=s%3AcDcIjRTsmMUQ1P68l_SQCvMAu967s-im.FYjjOq4krCcoezU%2FPikrtdc8k%2BSgjE72k4lbzeigCCY
Но именно по второму я теперь могу достучаться до файла.

Добавлено через 5 часов 36 минут
Темку можно закрывать
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
29.07.2020, 11:39
Неужели так не работает? В смысле с одним запросом на авторизацию...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
            using (var request = new HttpRequest())
            {
                request.Cookies = new CookieDictionary();
                request.KeepAlive = true;
                request.UserAgent = Http.ChromeUserAgent();
                LogAdd(request.Post("http://{айпи}/login/?txtUser={логин}&txtPassword={пароль}").Cookies.ToString());
 
                string content;
 
                try
                {
                    content = request.Get("http://{айпи}/ajax/system/dataselect?type=item_excelport&stype=1&userid=xx&name=&itemid=&sday=&eday=&config_id=xx&menu_id=xx&op_type=item_excel").ToString();
                }
                catch
                {
                    content = "ERROR";
                }
 
                LogAdd(content);
            }
1
3 / 3 / 0
Регистрация: 22.11.2019
Сообщений: 55
30.07.2020, 05:02  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
Неужели так не работает? В смысле с одним запросом на авторизацию...
Да, работает. Спасибо, на один прозвон меньше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.07.2020, 05:02
Помогаю со студенческими работами здесь

Достать время
Как можно достать системное время, с точностью до дней?

Достать bigint из БД
Пытаюсь достать значение типа bigint из БД PostgreSQL с помощью Visual C++: CDatabase cdbMyDB; ...

Достать БД из MS DOS
Добрый день, скажите пожалуйста как из MS DOS выгрузить все таблицы или саму базу данных, чтобы всунуть в 1С, перегуглил все что можно ......

Достать куб
Добрый день. Есть такая проблема. Есть кубы, созданные до меня и развернутые на сервере. Самого же проекта кубов нет ни на одной машине....

Достать id записи из БД
Суть такова: Мы формируем <select>, <option> которого берём из базы данных. Например, фамилии сотрудников будут теперь в выпадающем...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru