Скачать файл из Inet-a
Использую для закачки:
InternetOpen
HTTPQueryInfo
InternetOpenURL
InternetReadFile
Вопрос:
Если ссылка представляет собой PHP скрипт, то скачивается сам скрипт. Это конечно интересно, но мне нужен файл. Как быть?
Если ссылка представляет собой PHP скрипт, то скачивается сам скрипт.
А тебе не кажется, что это проблемы сервера? Кто ему давал право отдавать невыполненный скрипт? Уязвимость, однако.
А тебе не кажется, что это проблемы сервера? Кто ему давал право отдавать невыполненный скрипт? Уязвимость, однако.
Да мне-то вообщем пофиг уязвимый он или нет. Как файл скачать? Может др. функции надо использовать?
Да мне-то вообщем пофиг уязвимый он или нет. Как файл скачать? Может др. функции надо использовать?
Но вообщето при открытии ссылки ты должен одним из методов (Get? Post?)передать параметр скрипту. Может ошибка именно здесь? или же проблема действительно на сервере - трудно что либо посоветовать.
Но вообщето при открытии ссылки ты должен одним из методов (Get? Post?)передать параметр скрипту. Может ошибка именно здесь? или же проблема действительно на сервере - трудно что либо посоветовать.
Вот ссылка (для примера):
http://sources.codenet.ru/download.php?id=588&cid=0&o=0&my=0
Нужно получить указатель HINTERNET hFile c которым можно работать(опр-ть размер, скачать файл или часть файла).
Мои действия с использованием WinInet:
1...?
2...?
n...?
Это можно сделать только анализируя на стороне сервера поля HTTP заголовка например поле Referer и Cookie.
Вот так выглядит запрос на открытие страницы
Accept: */*
Referer: http://forum.codenet.ru/showthread.php?s=&threadid=22972
Accept-Language: ru
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)
Host: sources.codenet.ru
Cookie: bblastvisit=1113808206; bbuserid=9349; bbpassword=569a06ac5bd800f4f335ebf94ae35294; ; bbthreadview=a%3A1%3A%7Bi%3A22972%3Bi%3A1115119351%3B%7D; PHPSESSID=a2ad1e24e50bd1403edbfb0a65c47c67; b=b
Вот так выглядит запрос на скачивание файла
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Referer: http://sources.codenet.ru/download.php?id=588&cid=0&o=0&my=0
Accept-Language: ru
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)
Host: sources.codenet.ru
Cookie: bblastvisit=1113808206; bbuserid=9349; bbpassword=569a06ac5bd800f4f335ebf94ae35294; ; bbthreadview=a%3A1%3A%7Bi%3A22972%3Bi%3A1115119351%3B%7D; PHPSESSID=a2ad1e24e50bd1403edbfb0a65c47c67; b=b
Делайте выводы, господа программисты... :)
ты наверно уже заметил, что одна и таже ссылка в одном случае открывает страницу, а в другом - приводит к загрузке файла
Это можно сделать только анализируя на стороне сервера поля HTTP заголовка например поле Referer и Cookie.
Вот так выглядит запрос на открытие страницы
Accept: */*
Referer: http://forum.codenet.ru/showthread.php?s=&threadid=22972
Accept-Language: ru
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)
Host: sources.codenet.ru
Cookie: bblastvisit=1113808206; bbuserid=9349; bbpassword=569a06ac5bd800f4f335ebf94ae35294; ; bbthreadview=a%3A1%3A%7Bi%3A22972%3Bi%3A1115119351%3B%7D; PHPSESSID=a2ad1e24e50bd1403edbfb0a65c47c67; b=b
Вот так выглядит запрос на скачивание файла
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Referer: http://sources.codenet.ru/download.php?id=588&cid=0&o=0&my=0
Accept-Language: ru
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)
Host: sources.codenet.ru
Cookie: bblastvisit=1113808206; bbuserid=9349; bbpassword=569a06ac5bd800f4f335ebf94ae35294; ; bbthreadview=a%3A1%3A%7Bi%3A22972%3Bi%3A1115119351%3B%7D; PHPSESSID=a2ad1e24e50bd1403edbfb0a65c47c67; b=b
Делайте выводы, господа программисты... :)
Чего-то про одну и ту же ссылку Я не понял. Разъясни пожайлуста. Я не программист.
Чего-то про одну и ту же ссылку Я не понял. Разъясни пожайлуста. Я не программист.
Так ты же сам ее привел в качестве примера
http://sources.codenet.ru/download.php?id=588&cid=0&o=0&my=0
Если на нее кликнуть - открывается страница,
на которой можно скачивать файл.
Для скачивания нужно еще раз кликнуть
- там, где написано
Если посмотреть свойства этой ссылки, станет видно, что ее текст такой-же, как и тот, что открывает эту страницу.
Вот и получается, что
Так ты же сам ее привел в качестве примера
http://sources.codenet.ru/download.php?id=588&cid=0&o=0&my=0
Если на нее кликнуть - открывается страница,
на которой можно скачивать файл.
Для скачивания нужно еще раз кликнуть
- там, где написано
Если посмотреть свойства этой ссылки, станет видно, что ее текст такой-же, как и тот, что открывает эту страницу.
Вот и получается, что
Дак мне то, что делать? Как настроить загрузку через WinInet?
Дак мне то, что делать? Как настроить загрузку через WinInet?
В файле WININET.H прямо указано:
IN HINTERNET hInternet,
IN LPCSTR lpszUrl,
IN LPCSTR lpszHeaders OPTIONAL,
IN DWORD dwHeadersLength,
IN DWORD dwFlags,
IN DWORD_PTR dwContext
);
В твоем случае НУЖНО заполнить lpszHeaders
см.выше (внимательно) пример запроса на скачивание- поле Referer: должно содержать ту-же ссылку, что и поле GET
И не забудь про dwHeadersLength
Более того - на каждом сайте могут быть свои правила - может кто-то проверяет "Cookie:"
Нужно перехватывать пакеты, которыми обмениваются сервер и броузер , анализировать их (для этого tcplogger.exe - uinc.ru)
Через "Cookie:" могут выдавать временный билет на скачивание файла только тем , кто перед этим посетил другие страницы сайта...
В файле WININET.H прямо указано:
IN HINTERNET hInternet,
IN LPCSTR lpszUrl,
IN LPCSTR lpszHeaders OPTIONAL,
IN DWORD dwHeadersLength,
IN DWORD dwFlags,
IN DWORD_PTR dwContext
);
В твоем случае НУЖНО заполнить lpszHeaders
см.выше (внимательно) пример запроса на скачивание- поле Referer: должно содержать ту-же ссылку, что и поле GET
И не забудь про dwHeadersLength
Да то, что надо чего-то добавить в отправляемый хедер Я сразу подозревал и про параметр [LPCSTR lpszHeaders OPTIONAL] в курсе. Весь вопрос был чего именно. Как Ты уже догадался в HTTP Я ни бум-бум (поэтому и использую WinInet). И еще хочу уточнить - так будет всегда вслучае если сылка есть скрипт? Вот исследовал вчера, что говорит FlashGet:
Thu May 05 20:29:04 2005 Соединение с soft.0zones.com:80
Thu May 05 20:29:04 2005 Соединяемся с soft.0zones.com [IP=202.101.171.234:80]
Thu May 05 20:29:07 2005 Соединение установлено
Thu May 05 20:29:07 2005 GET /SoftDown.asp?ID=1446 HTTP/1.1
Thu May 05 20:29:07 2005 Host: soft.0zones.com
Thu May 05 20:29:07 2005 Accept: */*
Thu May 05 20:29:07 2005 Referer: http://soft.0zones.com/SoftView/SoftView_1446.html
Thu May 05 20:29:07 2005 Cookie: flux_stat_user=0.45876300 11153105131996051473; FromUrl=soft.0zones.com
Thu May 05 20:29:07 2005 User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)
Thu May 05 20:29:07 2005 Pragma: no-cache
Thu May 05 20:29:07 2005 Cache-Control: no-cache
Thu May 05 20:29:07 2005 Connection: close
Thu May 05 20:29:11 2005 HTTP/1.1 302 Object moved
Thu May 05 20:29:11 2005 Connection: close
Thu May 05 20:29:11 2005 Date: Thu, 05 May 2005 16:30:29 GMT
Thu May 05 20:29:11 2005 Server: Microsoft-IIS/6.0
Thu May 05 20:29:11 2005 Location: http://component.0zones.com:888/down/Raize.DropMaster.v1.50.rar
Thu May 05 20:29:11 2005 Content-Length: 184
Thu May 05 20:29:11 2005 Content-Type: text/html
Thu May 05 20:29:11 2005 Set-Cookie: ASPSESSIONIDSQTAASAA=PPKPFOBBLKHFEGCHLHIDBEMD; path=/
Thu May 05 20:29:11 2005 Cache-control: private
Thu May 05 20:29:11 2005 Перенаправление на http://component.0zones.com:888/down/Raize.DropMaster.v1.50.rar
Thu May 05 20:29:11 2005 Соединение с component.0zones.com:888
Thu May 05 20:29:11 2005 Соединяемся с component.0zones.com [IP=202.101.171.234:888]
Thu May 05 20:29:12 2005 Соединение установлено
Thu May 05 20:29:12 2005 GET /down/Raize.DropMaster.v1.50.rar HTTP/1.1
Thu May 05 20:29:12 2005 Host: component.0zones.com:888
Thu May 05 20:29:12 2005 Accept: */*
Thu May 05 20:29:12 2005 Referer: http://soft.0zones.com/SoftView/SoftView_1446.html
Thu May 05 20:29:12 2005 Cookie: ASPSESSIONIDSQTAASAA=PPKPFOBBLKHFEGCHLHIDBEMD
Thu May 05 20:29:12 2005 User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)
Thu May 05 20:29:12 2005 Pragma: no-cache
Thu May 05 20:29:12 2005 Cache-Control: no-cache
Thu May 05 20:29:12 2005 Connection: close
Thu May 05 20:29:13 2005 HTTP/1.1 200 OK
Thu May 05 20:29:13 2005 Content-Length: 1723180
Thu May 05 20:29:13 2005 Content-Type: application/octet-stream
Thu May 05 20:29:13 2005 Last-Modified: Mon, 26 Apr 2004 16:00:00 GMT
Thu May 05 20:29:13 2005 Accept-Ranges: bytes
Thu May 05 20:29:13 2005 ETag: "0802387a72bc41:1823"
Thu May 05 20:29:13 2005 Server: Microsoft-IIS/6.0
Thu May 05 20:29:13 2005 Date: Thu, 05 May 2005 16:30:33 GMT
Thu May 05 20:29:13 2005 Connection: close
Thu May 05 20:29:13 2005 Переход в состояние [Закачка]
тут вроде поля Refer и Get не совпадают.
Более того - на каждом сайте могут быть свои правила - может кто-то проверяет "Cookie:"
Нужно перехватывать пакеты, которыми обмениваются сервер и броузер , анализировать их (для этого tcplogger.exe - uinc.ru)
Через "Cookie:" могут выдавать временный билет на скачивание файла только тем , кто перед этим посетил другие страницы сайта...
Неужели все так сложно...
CGI - это программа, и как она работает - знает только ее разработчик,
поэтому выводить какие-то общие правила совсем не просто.
Иногда такой эффект возникает из-за не опытности
автора CGI, который не предусмотрел все возможные
варианты ситуаций.
Иногда этого требует политика администрации сайта.
Например есть хостеры, которые на один порт (80)
вешают дох@#№... сайтов с разными доменными
именами, а разводка осуществляется по полю "Host:"
Можно себе представить что будет, если не заполнить это поле :)
Я то-же не могу всего предугадать..
Можно только собрать определенную статистику
поведения скриптов и на ее основе создать обработчики для множества различных ситуаций.
Но все это будет работать не со 100% гарантией,
а с какой-то долей вероятности.
Вот такое "IMHO" :)
Обрати внимание на запись "Перенаправление на..."
это реакция на строку
"Location: http://component.0zones.com:888/dow...aster.v1.50.rar"
В ответ на первый запрос был выдан адрес, с которого нужно скачивать файл, вторым запросом
пошло скачивание файла. Вроде все очевидно...
Обрати внимание на запись "Перенаправление на..."
это реакция на строку
"Location: http://component.0zones.com:888/dow...aster.v1.50.rar"
В ответ на первый запрос был выдан адрес, с которого нужно скачивать файл, вторым запросом
пошло скачивание файла. Вроде все очевидно...
2 Gizmo:
анализируй статусы ответа сервера :
{
errout("echo_http_status: HttpQueryInfo error = %i!!\n", GetLastError());
return -1;
};
dwStatus <- Собсна статус
сами коды в MSDN топик HTTP Status Codes. Если сервер присылает редирект, то создавай новый запрос на ресурс.
Браузеры, как правило, поддерживают авторедирект, а вот твоя прога еще нет..
По предыдущим топикам судить, то скрипт, который ты дал для примера, походу анализит Реферера, т.е. откуда пришел пользователь. Чтобы не размещали ссыкли на вражьих серверах.. А так может придется подделывать заголовки, куки ..