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

Вроде в каких-то его событиях передается заголовок (header) перед запросом.
...
Рейтинг: 0 / 0
30.07.2019, 15:22
    #39843032
Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скачать файл по внутренней ссылке
wadman
мы можем переговорить в скайпе, icq или вотсапе?
...
Рейтинг: 0 / 0
30.07.2019, 15:52
    #39843050
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скачать файл по внутренней ссылке
wadmanПодсмотреть заголовок, который передается эксплоером при скачивании и сэмулировать его.Если там ни какой-нибудь обфусцированный JS
...
Рейтинг: 0 / 0
30.07.2019, 15:54
    #39843051
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скачать файл по внутренней ссылке
Петрмы можем переговорить в скайпе, icq или вотсапе?
Не получится. Проще и быстрее под отладчиком посмотреть в событие что-то вроде before navigate.
...
Рейтинг: 0 / 0
30.07.2019, 16:24
    #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
30.07.2019, 17:04
    #39843099
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скачать файл по внутренней ссылке
Петр,

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

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

нет - отказ в авторизации
...
Рейтинг: 0 / 0
30.07.2019, 19:01
    #39843135
ziv-2014
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скачать файл по внутренней ссылке
Петр, Поставь fiddler и посмотри на заголовки и куки.
...
Рейтинг: 0 / 0
30.07.2019, 19:36
    #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
30.07.2019, 20:15
    #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
30.07.2019, 21:28
    #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
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Скачать файл по внутренней ссылке / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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