Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
1

API функция для получения информации о файле в интернете

25.09.2013, 19:24. Показов 2248. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Скажите, пожалуйста, с помощью какой API-функции можно узнать имя файла в интернете?

Например, я указываю путь (Путь просто так указал. По этому пути ничего нет.):
https://www.cyberforum.ru/newt... hread&f=56

и получаю имя файла.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.09.2013, 19:24
Ответы с готовыми решениями:

Функции WinApi для получения системной информации
Кто может помочь в написании программы "Использование функций WinApi для получения системной...

API функция получения системной информации
Помогите, пожалуйста, не понимаю как ее нужно сделать. Выполнить копирование по адресу infnrne...

Программа для получения информации с сайта в интернете
Есть следующий код: WAIT WINDOW "Соединение с сервером центробанка ..." NoWait ie =...

Программа для получения информации из сайта и присвоения информации переменным
Доброго времени суток, уважаемые пользователи форума! Надеюсь, у Вас сегодня хорошее настроение?...

12
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
25.09.2013, 19:59 2
Цитата Сообщение от Скрипт Посмотреть сообщение
и получаю имя файла.
Ссылка должна указывать на файл или на что?
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
25.09.2013, 20:10  [ТС] 3
castaway, ссылка указывает на файл. Сложность в чём? В том, что иногда ссылки не содержат имена файлов, а являются текстом для сайтов-программ, которые обрабатывают эти ссылки и дают имя файла, который нужно скачать.
0
Evg
Эксперт CАвтор FAQ
21280 / 8302 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
25.09.2013, 20:16 4
Цитата Сообщение от Скрипт Посмотреть сообщение
castaway, ссылка указывает на файл. Сложность в чём? В том, что иногда ссылки не содержат имена файлов, а являются текстом для сайтов-программ, которые обрабатывают эти ссылки и дают имя файла, который нужно скачать.
Думается, это уже зависит от протокола (HTTP или FTP), а никак не от WinAPI
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
25.09.2013, 20:28 5
Ну тогда может копнуть в сторону функций: InternetOpen, InternetOpenURL и InternetReadFile, или может есть какая-то конкретная функция чтобы не читать файл если в этом нет необходимости..
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
25.09.2013, 20:37  [ТС] 6
Evg, я скачиваю API-функцией "URLDownloadToFileA" файлы. Но имя файлу нужно давать самому. Но я заранее не знаю, какое там расширение у файла. Да и вообще лучше назвать файл так же, как он хранится на удалённом компьютере.


Цитата Сообщение от castaway Посмотреть сообщение
чтобы не читать файл если в этом нет необходимости..
читать файл нет необходимости, нужно вот именно узнать информацию о файле, а именно имя файла, которое у этого файла на удалённом компьютере.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
25.09.2013, 20:53 7
Цитата Сообщение от Скрипт Посмотреть сообщение
узнать информацию о файле, а именно имя файла, которое у этого файла на удалённом компьютере.
Ищите в ответе сервера HTTP-заголовок "Content-Disposition".
Например:
Content-Disposition: attachment; filename="image.jpg"; ...
Но реально на той стороне может и не быть файла с таким именем, как и
файла вообще, это лишь параметр, который формируется HTTP-сервером.
1
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
25.09.2013, 20:57  [ТС] 8
Убежденный, я скачивал doc-файлы, xls-файлы.
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
25.09.2013, 21:31 9
Цитата Сообщение от Убежденный Посмотреть сообщение
Но реально на той стороне может и не быть файла с таким именем, как и
файла вообще, это лишь параметр, который формируется HTTP-сервером.
Цитата Сообщение от Скрипт Посмотреть сообщение
Убежденный, я скачивал doc-файлы, xls-файлы.
Но ведь если ссылка указывает на файл, даже если она не прямая, то в заголовке ведь будет имя файла, Убежденный, правильно я понимаю?
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
25.09.2013, 21:58 10
Лучший ответ Сообщение было отмечено как решение

Решение

Можно посмотреть на реальном примере.
Вот у меня есть ссылка на скачивание очередной версии Firefox:
https://download.mozilla.org/?product=firefox-stub&os=win&lang=ru

Как видно, имени файла в ней не содержится.
Посмотрим HTTP-трафик, который получается если пройти по ссылке:

Запрос:
GET /?product=firefox-stub&os=win&lang=ru HTTP/1.1
User-Agent: Opera/9.80 (Windows NT 6.1; WOW64; U; MRA 8.0 (build 5784); ru) Presto/2.10.289 Version/12.02
Host: download.mozilla.org
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8
Accept-Encoding: gzip, deflate
Cookie: ...
Cache-Control: no-cache
Connection: Keep-Alive
Ответ:
HTTP/1.1 302 Found
Server: Apache
X-Backend-Server: bouncer8.webapp.phx1.mozilla.com
Cache-Control: max-age=15
Content-Type: text/html; charset=UTF-8
Date: Wed, 25 Sep 2013 17:17:33 GMT
Location: https://download-installer.cdn.mozilla.net/pub/mozilla.org/firefox/releases/24.0/win32/ru/Firefox%20Setup%20Stub%2024.0.exe
Keep-Alive: timeout=3, max=500
Connection: Keep-Alive
X-Cache-Info: caching
Content-Length: 0
При проходе по ссылке сервер перенаправил клиента на другой URL, который содержит
имя файла (выделил жирным).

А вот пример скачивания файла с Google Docs:
https://docs.google.com/file/d/0B3wmqwvKYtEUTVpKTWpoOWFPa0U/edit?usp=sharing

Запрос:
GET /docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/b6mis49pjrcc9jmvfk2e53fsu5q1hir2/1380124800000/02309848972903750548/*/0B3wmqwvKYtEUTVpKTWpoOWFPa0U?h=16653014193614665626&e=download HTTP/1.1
User-Agent: Opera/9.80 (Windows NT 6.1; WOW64; U; MRA 8.0 (build 5784); ru) Presto/2.10.289 Version/12.02
Host: doc-0c-5g-docs.googleusercontent.com
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8
Accept-Encoding: gzip, deflate
Referer: https://docs.google.com/file/d/0B3wmqwvKYtEUTVpKTWpoOWFPa0U/edit?pli=1
Connection: Keep-Alive
Ответ:
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: false
Access-Control-Allow-Headers: Accept, Accept-Language, Authorization, Cache-Control, Content-Disposition, Content-Encoding, Content-Language, Content-Length, Content-MD5, Content-Range, Content-Type, Date, GData-Version, Host, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, Origin, OriginToken, Pragma, Range, Slug, Transfer-Encoding, X-ClientDetails, X-GData-Client, X-GData-Key, X-Goog-AuthUser, X-Goog-Encode-Response-If-Executable, X-Goog-Correlation-Id, X-Goog-Upload-Command, X-Goog-Upload-Content-Disposition, X-Goog-Upload-Content-Length, X-Goog-Upload-Content-Type, X-Goog-Upload-Offset, X-Goog-Upload-Protocol, X-HTTP-Method-Override, X-JavaScript-User-Agent, X-Origin, X-Referer, X-Upload-Content-Length, X-Upload-Content-Type, X-Use-HTTP-Status-Code-Override, X-YouTube-VVT, X-YouTube-Page-CL, X-YouTube-Page-Timestamp
Access-Control-Allow-Methods: GET,OPTIONS
Content-Type: text/plain
Content-Disposition: attachment;filename="Hello.txt";filename*=UTF-8''Hello.txt
Content-Length: 17
Date: Wed, 25 Sep 2013 17:55:19 GMT
Expires: Wed, 25 Sep 2013 17:55:19 GMT
Cache-Control: private, max-age=0
Server: HTTP Upload Server Built on Sep 4 2013 16:50:41 (1378338641)
Alternate-Protocol: 443:quic
Здесь уже другая ситуация: сервер возвращает имя файла в заголовке Content-Disposition.
Думаю, есть и другие вариации...
4
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
25.09.2013, 22:58  [ТС] 11
Убежденный, а как сделать запрос и получить ответ? Какие для этого нужно использовать инструменты? Вообще - это раздел Форума про API. С помощью каких API-функций это можно сделать?
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
25.09.2013, 23:13 12
Можете использовать WinInet - http://msdn.microsoft.com/en-u... s.85).aspx
Для клиентских приложений это самый простой способ работать с HTTP(S), не прибегая к
использовании сторонних компонентов.
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
26.09.2013, 08:06  [ТС] 13
Убежденный, я пробовал с помощью функций "WinInet" узнать информацию о файле, но не получилось. Конкретно я использовал "HttpQueryInfoA" и подставлял различные флаги "lInfoLevel", но кроме размера файла не получил никакой информации - просто пустая строка возвращается.
0
26.09.2013, 08:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.09.2013, 08:06
Помогаю со студенческими работами здесь

Распарсить страницу в Интернете для получения IP, региона и т.д
Добрый день. Начал учиться составлять регулярные выражения. Не буду писать тут все сразу, только по...

Api для получения погоды
Подскажите пожалуйста api для получения погоды

Использование VK Api для получения определенного поста
Простите за тему в виде "решите за меня задачу и разжуйте все", но просто не знаю что для этого...

Какое api использовать для получения города по ip?
Добрый день, Есть ли готовые решения для получения города с точки, где вошел на сайт...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru