powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Скачать файл по внутренней ссылке
12 сообщений из 12, страница 1 из 1
Скачать файл по внутренней ссылке
    #39842907
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для понимания, что нужно опишу общий процесс:
Использую класс TInternetExplorer из модуля SHDocVw для отображения браузера внутри своего приложения.
Через браузер пользователь вручную авторизируется в стороннем web приложении, заходит на нужную страницу. Я через TInternetExplorer получаю код html страницы для парсинга в том числе и внутреннюю ссылку на файл.
Если я подставляю эту ссылку на файл в адрес TInternetExplorer то этот файл можно скачать, но с появлением окна Intenet Explorer-a (скачать / открыть).
Задача как скачать этот файл без дополнительных popup окон и в нужное место?
Если использовать TIdHTTP, то как мне передать в него параметры текущей сессии InternetExplorer?
Прошу помощи, использую delphi 7.
...
Рейтинг: 0 / 0
Скачать файл по внутренней ссылке
    #39842939
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПетрЕсли использовать TIdHTTP, то как мне передать в него параметры текущей сессии InternetExplorer?
Подсмотреть заголовок, который передается эксплоером при скачивании и сэмулировать его.

Вроде в каких-то его событиях передается заголовок (header) перед запросом.
...
Рейтинг: 0 / 0
Скачать файл по внутренней ссылке
    #39843032
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
мы можем переговорить в скайпе, icq или вотсапе?
...
Рейтинг: 0 / 0
Скачать файл по внутренней ссылке
    #39843050
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanПодсмотреть заголовок, который передается эксплоером при скачивании и сэмулировать его.Если там ни какой-нибудь обфусцированный JS
...
Рейтинг: 0 / 0
Скачать файл по внутренней ссылке
    #39843051
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петрмы можем переговорить в скайпе, icq или вотсапе?
Не получится. Проще и быстрее под отладчиком посмотреть в событие что-то вроде before navigate.
...
Рейтинг: 0 / 0
Скачать файл по внутренней ссылке
    #39843070
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
там все в принципе читаемо, но как это использовать?
причем DNSID - это как раз тот параметр который отвечает за "ID" открытой сессии
Код: html
1.
<a href="/?DNSID=wmHNWwDwGKCmghbEqDB6G_Q">


но он в теге <body>

вот верхняя часть html

Код: html
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.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ru" class=" modern">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=windows-1251">
    <meta name="msapplication-config" content="none"/>
    <meta name="viewport" content="width=1280">
    <title>35502-2019</title>
        <link rel="stylesheet" type="text/css" href="/design/css/map.php?10.1-ps0849"/>

    <link rel="icon" type="image/png" href="/design/custom/rospotrebnadzor/favicon.png ">
            <link rel="stylesheet" href="/design/css/user/modern_said.css">
    
    <script type="text/javascript">
        
        var ORG = {'id':32039,'parent_id':2,'name':'xxxx','ordi':0,'short_name':'xxxx','address':'xxxx','phone':'+7(495)687-40-35','fax':'','native_id':0,'super_short_name':'xxxx','always_letter':0,'cdate':'2017-10-09 10:17:08','cuser_id':73803,'edate':'2019-02-07 16:17:40','euser_id':425908,'fmin':0,'global_id':'00270000032039','owner':3,'w_name':'','g_mtime':'2019-02-07 16:17:40','medo_uid':'','medo_email':'','is_migration':0,'postalcode':129626,'is_category':0,'use_medo_notification':0,'medo_features':'','preferable_delivery_type':0,'lotus_unid':'','superior_org_id':'','tax_number':777,'is_egrul':0,'type_name':'стандартная','dadata_uid':'602726d8e3a3efccfe687740d85a3619d33dc94ddb497594bc768c6dd6021765'};
                var municipalAddress = false;
    </script>

        <script type="text/javascript" src="/js/map.php?10.1-ps0876"></script>

    <script>
        var eventPopTimeout = setTimeout(_popper, 2000);
        var eventPushTimeout = setTimeout(_pusher, 1500);
    </script>
    <script type="text/javascript" src="/js/qrCodeScanner.js"></script>
</head>
<body  class="">
	<div class="body-content">
		<div class="s-header">
	<div class="s-header__h">
		<div class="s-app-logo">
			<a href="/?DNSID=wmHNWwDwGKCmghbEqDB6G_Q">
				<table>
    <tr>
        <td class="lenobl-logo logo-td">
            <svg width="45" height="45">
                <image xlink:href="/design/custom/rsp/logo-modern-lefttop.svg" width="45" height="45"/>
            </svg>
        </td>
        <td>
            <div class="s-app-logo-text lenobl-logo-text"><b>XXX</b></div>
        </td>
    </tr>
</table>			</a>
		</div>
		<div class="s-app-text">
			<div class="s-app-text__line">
				<span>Техническая поддержка:  999</span><span>, пн-пт с 8.00 до 20.00</span>				<div class="s-app-text__logout">
					Добрый вечер, Иванова М.Г
					(<a href="/logout.php?DNSID=wmHNWwDwGKCmghbEqDB6G_Q">выйти</a>)
                    				</div>
			</div>
			<div class="s-app-text__line">
				<a href="/news.php?DNSID=wmHNWwDwGKCmghbEqDB6G_Q">Помощь</a><b> | </b><span>Адрес технической поддержки: </span><a href="mailto:mskdoc@tr.ru">mskdoc@tr.ru<;/a>			</div>
		</div>
								<div class="s-app-upload" data-userpic="/userpic/425832.jpg">
	      	      					<span title="Добавить фото" class="s-ava-upload">
						<span class="s-ava-upload__title">Добавить</span>
						<img src="/images/spacer.gif" width="50" height="50">
					</span>
	      		</div>
	</div>
</div>

<div id="spin-loading" style="display: none; width: 140px; height: 140px; position: fixed; top: 50%; left: 50%; margin-left: -70px; margin-top: -70px; z-index: 2000;"></div>

<script>
***
...
Рейтинг: 0 / 0
Скачать файл по внутренней ссылке
    #39843099
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петр,

А если сразу на получаемую тобой ссылку натравить UrlDownloadToFile() - он скачивается?
...
Рейтинг: 0 / 0
Скачать файл по внутренней ссылке
    #39843103
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterПетр,

А если сразу на получаемую тобой ссылку натравить UrlDownloadToFile() - он скачивается?

нет - отказ в авторизации
...
Рейтинг: 0 / 0
Скачать файл по внутренней ссылке
    #39843135
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петр, Поставь fiddler и посмотри на заголовки и куки.
...
Рейтинг: 0 / 0
Скачать файл по внутренней ссылке
    #39843146
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ziv-2014Петр, Поставь fiddler и посмотри на заголовки и куки.
Поставил,
заголовки:

CONNECT <url>:443 HTTP/1.0
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
Host: <url>
Content-Length: 0
DNT: 1
Connection: Keep-Alive
Pragma: no-cache

куки:
This request did not send any cookie data.
...
Рейтинг: 0 / 0
Скачать файл по внутренней ссылке
    #39843158
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавил параметры в request - эффект тот же: "http/1.1 302 found"

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
procedure DownloadFile(url: string; path, filename: string);
var
  stream : TFileStream;
  http : TIdHTTP;
  s: string;
begin
 http := TIdHTTP.Create;
 http.Request.UserAgent := 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)';
 http.Request.Connection := 'Keep-Alive';
 http.Request.Host := <url>;
 http.Request.Pragma := 'no-cache';
 http.Request.ContentLength := 0;

 s := path + filename;
 stream := TFileStream.Create(s, fmCreate);
 try
    http.get(url, stream);
 finally
    FreeAndNil(http);
    FreeAndNil(stream);
 end;
end;



Подстановка http.Request.Username и http.Request.Password не помогает
...
Рейтинг: 0 / 0
Скачать файл по внутренней ссылке
    #39843175
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПетрЧерез браузер пользователь вручную авторизируется в стороннем web приложении, заходит на нужную страницу. Я через TInternetExplorer получаю код html страницы для парсинга в том числе и внутреннюю ссылку на файл.я не понял, вы по-очереди за компьютер садитесь ?


Петр302 foundэто значит, что было перенаправление. В полученных от сервера заголовках нужно смотреть заголовок "location". Хотя в индях можно включить редирект. Но я бы выкинул инди.

Вероятно, что переадресация не на файл, а на страницу авторизации. Если это так, то нужно попробовать подсунуть куки из TInternetExplorer в TIdHTTP. Достать их не сложно:

Код: pascal
1.
2.
3.
4.
5.
var
  Doc: IHtmlDocument2;
begin
  Doc := IE.Document as IHTMLDocument2;
  ShowMessage(Doc.cookie);



Но если пользователь авторизуется только ради этого файла, то fiddler в руки и автоматизировать весь процесс от авторизации до скачивания файла.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Скачать файл по внутренней ссылке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]