Тотальная неудачница и убийца жёстких дисков.
#post-id: 2595-01-21
#original-date: 3.09.2007 Mon
#original-time: 1:21 AM
#original-day: 2595
Хотала что-нибудь написать перед сном, а вместо этого занималась всякой фигнёй... Узнала только что можно в WinInet Control переопределить стандартные заголовки, которых три штуки... А значит сервер будет получать вместо "Microsoft URL Control - 6.01.9782" мою "AJPapps - Блоги@Mail.ru, клиент 1.00.0004"... Мелочь, а сколько счастья ^^
#music: Grand Theft Auto: Vice City\Wild Style
#original-date: 3.09.2007 Mon
#original-time: 1:21 AM
#original-day: 2595
Хотала что-нибудь написать перед сном, а вместо этого занималась всякой фигнёй... Узнала только что можно в WinInet Control переопределить стандартные заголовки, которых три штуки... А значит сервер будет получать вместо "Microsoft URL Control - 6.01.9782" мою "AJPapps - Блоги@Mail.ru, клиент 1.00.0004"... Мелочь, а сколько счастья ^^
#music: Grand Theft Auto: Vice City\Wild Style
Ыгы, я тут тоже на досуге позаменял идентификацию @Diary.Client'а - раньше он идентифицировался как Opera 8.54, теперь как @Diary.Client/версия.
Правда, я люблю с сокетами работать, а не с WinInet =)
А с кириллицей в заголовке не будет проблем? ^^'
Ну, я решила не извращаться и использовать то, что уже есть. Лень победила ^^
А с кириллицей в заголовке не будет проблем? ^^'
Вот это не знаю. Пока что Win32 сервер Apache не ругался, юниксовый сервер Mail.ru - тоже. По идее, им эта строчка только для логов нужна... Кроме того, я вообще не видела ни разу как в заголовке HTTP записывается всё что не ASCII ^^ Наверняка не совсем как в стандарте электронной почты ^^
угу =)
а я изначально учился именно с сокетами... ну, не через API, а с помощью соответствующих компонентов) кстати, у меня среди "готовых" файлов, которые я использую как часть почти всех своих Дельфийских проектов, наряду с компонентами типа реализации регулярных выражений и PngImage есть еще и самописный сетевой модуль, адаптированный к HTTP (за последние полтора года как-то само написалось) ^_^
По идее, им эта строчка только для логов нужна...
только, наверно, оно будет записано не в той кодировке и им будет лень перекодировать, чтобы прочитать =))
Кроме того, я вообще не видела ни разу как в заголовке HTTP записывается всё что не ASCII ^^
подозреваю, что URLENCODE'ом - так же, как в URI или в заголовке coоkie: , и даже postdata при content-type=application/x-www-form-urlencoded =)
а WinInet его самостоятельно не кодирует случайно?)
В общем-то я с сокетами тоже начинала, но ингда хочется чего-то попроще. Там, для POP3 сессий сокет самое то, но для HTML cо всеми тараканами множества серверов... WinInet тоже работает через сокеты, но делает работу удобнее. Правда, смущает то что он очень плотно работает с кэшем IE, но всёже.
В принципе, у меня тоже много всего что я таскаю из проекта в проект, но я предпочитаю это выносить в библиотеки и компоненты ^^ Сейчас у меня прибавилась функция GetFileFromInet(), которая работает через WinInet в синхронном режиме и не требует форм для контрола ^^ Мне очень часто нужно именно такое.
только, наверно, оно будет записано не в той кодировке и им будет лень перекодировать, чтобы прочитать =))
Всё зависит от платформы и сервера ^_^ Апач для Win32, например, вообще не пишет (по умолчанию) User-Agent. А вот IIS пишет.
подозреваю, что URLENCODE'ом - так же, как в URI или в заголовке coоkie: , и даже postdata при content-type=application/x-www-form-urlencoded =)
Хммм... Вот бы ещё посмотреть как это всё кодируется, а то я когда-то пробовала, но ни чего у меня не получилось. IE - по-своему, Opera - по-своему...
а WinInet его самостоятельно не кодирует случайно?)
Вроде бы нет. Правда, у меня HTTP снифер почему-то прекрасно перехватывал WinInet Control, а вот когда я стала вызывать функции WinInet.DLL, он перестал перехватывать. Забавно было наблюдать, когда запускаю IE4 - всё в порядке. Следом свою программу - тишина... /* Это я в NT4 тестирую. */
я еще люблю функцию URLDownloadToFile из urlmon.dll =)
Сейчас у меня прибавилась функция GetFileFromInet(), которая работает через WinInet в синхронном режиме и не требует форм для контрола ^^ Мне очень часто нужно именно такое.
а у меня многие вещи имитируют поведение php-шных функций) например, в @клиенте (и в еще одном проекте, кот. я для Arrgot делал) есть функция getfile(), которая на входе принимает строку - путь к файлу либо URL - а на выходе содержание файла. То есть одна ф-ия для URL и локальных файлов, как file_get_contents() с allow_url_fopen в php =)
а элементы я почти всегда создаю динамически, кроме тех, которые относятся к интерфейсу - т.е. которые надо подгонять друг к другу или просто много свойств задавать при инициализации, их я делаю в design mode =)
Всё зависит от платформы и сервера ^_^ Апач для Win32, например, вообще не пишет (по умолчанию) User-Agent. А вот IIS пишет.
возможно, у них есть свой логгинг =)
Хммм... Вот бы ещё посмотреть как это всё кодируется, а то я когда-то пробовала, но ни чего у меня не получилось. IE - по-своему, Opera - по-своему...
а в каком смысле - как кодируется?
как работает сама функция URLENCODE?
кстати, можно попробовать установить coоkie с русским именем или аналогичный ETag и подсмотреть сниффером, как браузер будет их отправлять назад.)
Вроде бы нет. Правда, у меня HTTP снифер почему-то прекрасно перехватывал WinInet Control, а вот когда я стала вызывать функции WinInet.DLL, он перестал перехватывать. Забавно было наблюдать, когда запускаю IE4 - всё в порядке. Следом свою программу - тишина... /* Это я в NT4 тестирую. */
кстати, я раскопал дистрибутив Win95, он весит 32.7 Мб =)
а вообще, я заметил, что HTTP-снифферы не все передачи воспринимают именно как HTTP. Например, проверку избранного в официальном клиенте удалось выловить только на уровне PPP-сниффера) не слишком удобно - каждый пакет ловится отдельно, так что передача выхватывается кусками, но если нужно, то сойдет =) есть сниффер от Ufasoft - вот он меня спасает в таких ситуациях)
Можно прототип?
а у меня многие вещи имитируют поведение php-шных функций) например, в @клиенте (и в еще одном проекте, кот. я для Arrgot делал) есть функция getfile(), которая на входе принимает строку - путь к файлу либо URL - а на выходе содержание файла. То есть одна ф-ия для URL и локальных файлов, как file_get_contents() с allow_url_fopen в php =)
Кстати, это напомнило мне как я один раз открыла, что в XP Common Dialog может принимать URL и возвращать имя файла из кэша.
возможно, у них есть свой логгинг =)
Да, там выбирается формат, но по умолчанию стоит W3C ^^
а в каком смысле - как кодируется?
как работает сама функция URLENCODE?
Угу ^^
кстати, я раскопал дистрибутив Win95, он весит 32.7 Мб =)
Думаю, что Microsoft сделала дистрибутив 98 гораздо более тяжёлым для того чтобы иные герои не ставили её с дискет ^^
хм-м...
VBшное определение пойдет?)
Private Declare Function URLDownloadToFile Lib "urlmon" Alias
"URLDownloadToFileW" (pCaller As Any, ByVal URL As String, ByVal File As
String, ByVal Reserved As Long, lpfnCB As Long) As Long
в Delphi она определяется вот так:
function URLDownloadToFile(Caller: IUnknown; URL: PChar; FileName: PChar; Reserved: DWORD; StatusCB: IBindStatusCallback): HResult; stdcall;
чтобы просто скачать URL, можно все, кроме URL и FileName установить в нули.
Кстати, это напомнило мне как я один раз открыла, что в XP Common Dialog может принимать URL и возвращать имя файла из кэша.
да?
не знал)
Угу ^^
ну... все, что не [a-zA-Z0-9_] - кодируется символом процента и hex-кодом символа.
некоторые браузеры (началось все с IE) заменяют пробел на знак "+", но это не входит в стандарт, поэтому я пробел всегда кодирую как %20.
и все...
в принципе, можно вообще все символы закодировать через %HEX, это будет правильно =)
Думаю, что Microsoft сделала дистрибутив 98 гораздо более тяжёлым для того чтобы иные герои не ставили её с дискет ^^
ну... возможно) а win95 на дискетах распространялась (правда, и на CD тоже). И вот мой вариант - как раз дискеточный) CDROM в моем компе появился гораздо позже установки)
Я, как обычно, сначала спросила, а потом полезла в MSDN ^^ Оказалось что последний параметр - это указатель на интерфейс, в котором вызывается функция по мере закачки. Но так как нормального определения этого интерфейса я не нашла, я туда записала LPDISPATCH, и просто передаю Nothing ^^ А в первом параметре оставила LPUNKNOWN (это я все определения делаю в TLB).
Но всё равно спасибо ^_^
Кстати, функция прикольная, но не настолько гибкая. По крайней мере нельзя указаывть дополнительные заголовки ^^
не знал)
Я тоже не знала, пока не заметила что в некоторых программах если передать имя файла с лишними пробелами, она начинает подвешиваться ^^ Поэкспереиентировав, я докопалась до истины ^^ Но всё равно я бы на месте Micosoft оставила старый вариант парсинга, когда всё лишнее с кавычками срезалось, и как URL парсировала бы только всё что с протокола начинается.
в принципе, можно вообще все символы закодировать через %HEX, это будет правильно =)
Давным-давно я заметила что Опера и IE кодируют всё по-разному ^^ В одной строке числа были разными ^^ Вот я и сомневаюсь ^^
угу, я знаю, что этот параметр служит для callback-уведомлений о ходе процесса (да и по названию легко догадаться ^_^), но ни разу не пытался использовать)
скорее, мне эта функция удобна как наиболее простой способ скачать файл на диск - например, смайлик или картинку, где заголовки не так и нужны)
Но всё равно я бы на месте Micosoft оставила старый вариант парсинга, когда всё лишнее с кавычками срезалось, и как URL парсировала бы только всё что с протокола начинается.
хм... а мне казалось, так оно и есть... может, это вообще две не связанные между собой вещи?
Давным-давно я заметила что Опера и IE кодируют всё по-разному ^^ В одной строке числа были разными ^^ Вот я и сомневаюсь ^^
ну... еще они могут кодировать как windows-1251 или как utf-8. Кодировка устанавливается в настройках. IE чаще норовит использовать utf-8, поэтому в URL'ах лучше сразу прописывать нужный код. Но вообще-то все равно почти все работают с windows-1251...
Кстати, я использовала ^^ Правда, пришлось поковыряться с определением интерфейса, и чтобы его можно было имплементировать в VB ^^' Но у меня работает ^_^
хм... а мне казалось, так оно и есть... может, это вообще две не связанные между собой вещи?
Строка вида ""C:\Img.TXT" " - это не URL, но её тоже начинают искать в Инете. Я это проверяла. Собственно, вопрос почему не открываются такие файлы меня и привёл к открытию новой фичи.
а это в каких таких программах это происходит? попробовал в Офисе и Common Dialog - оно распознается как c:\img.txt )
Правда, пришлось поковыряться с определением интерфейса, и чтобы его можно было имплементировать в VB ^^'
какие сложности)
Точно помню что в Бэки. А тестировала я это поведение в Блокноте. Знаю также что Фотошоп очень не любит такие файлы. Он не ищет их в Инете, но говорит что нет такого файла.
А Офис вообще всегда впереди планеты всей ^^ XPшные диалоги как раз в Офисе и тестировались.
какие сложности)
Ещё бы ^^ Ведь там не объект класса передаётся, а объект, который реализует этот интерфейс ^^ Ну и нелюбовь VB ко многим OLE типам ^^
на VB вообще не пишутся интерфейсы?) или просто их еще нужно заставить работать?)
А тестировала я это поведение в Блокноте.
проверил в Блокноте. Он вообще вывалился. Нда...
ФШ сказал, мол, "not the right kind of document", значит, файлик нашелся. Может, я не то ввожу, что надо? Кавычка, потом имя файла, потом еще кавычка, потом пробел. (Попробовал несколько пробелов в конце и пробовал без кавычек - результат тот же...)
Пишутся, но это немного замаскировано. Вот в IDL определяется интерфейс и coclass, который связывает интерфейс с его реализацией. Тоесть если есть только интерфейс, в VB можно объявить переменную этого типа (или имплементировать), а если есть coclass, то можно использовать New.
В VB напрямую этого делать нельзя, но если ты делаешь компонент с публичным классом, то... В общем, если у класса будет Multiuse, то он будет в библиотеке типов (которую потом будут видеть программы) определён как интерфейс и coclass. А если сделть PublicNotCreatable, то в библиотеке типов будет только интерфейс. Но в самом коде библиотеки (компонента) ты можешь создавать объекты ^^
проверил в Блокноте. Он вообще вывалился. Нда...
ФШ сказал, мол, "not the right kind of document", значит, файлик нашелся. Может, я не то ввожу, что надо? Кавычка, потом имя файла, потом еще кавычка, потом пробел. (Попробовал несколько пробелов в конце и пробовал без кавычек - результат тот же...)
Хммм... Странно ^^ Честно говоря, я за Common Dialog давно не бралась, поэтому не могу сказать что именно там происходит ^^ Всё руки не дойдут.
*залез в справку по Дельфям* хм, странно, там написано, что интерфейсы создаются директивой dispinterface со своим синтаксисом... хотя сколько себя помню, интерфейсы создавались как классы-наследники от IDispatch... O.o
Хммм... Странно ^^
может, Виста себя все же нормально ведет. Но в Офисе у меня не системные, а старые диалоги. И он все-таки понимает...
Дело в том, что IDL - это отдельный язык, который просто говорит что такой-то объект реализует такой интерфейс. Тоесть он только описывает. А другие языки всё реализуют. Ну, естественно, что для удобства языки вроде VB или Delphi этот процесс маскируют и IDL сами формируют (тоесть, не саму IDL, а библиотеку типов, которая обычно компилируется из IDL файлов). Только C++ это не маскирует и заставляет писать всё ручками или черз мастеров. На самом деле Интерфейсы поддерживают что-то похожее на наследование в C++, но COM этого не поддерживает. Там есть переключение интерфейсов. Тоесть каждый объект реализует IUnknown и может IDispatch (VB, например). Ну и какой-то ещё. А потом уже на уровне кода работы с объектами используется QueryInterface() интерфейса IUnknown для получения указателя на конкретный интерфейс (тот же IDispatch для позднего связывния) по его GUID.
Вот пример описания интерфейса и coclass IShellLink. Без coclass создание объекта невозможно.
В общем, могу сказать только что OLE - это та ещё тема ^^ Поэтому и появились языки вроде VB, которые от этого уберегали ^^
угу. Вот конкретную реализацию этого самого берет на себя компилятор)
В общем, могу сказать только что OLE - это та ещё тема ^^
Угу, я вообще стараюсь по возможности OLE/COM не касаться даже =))
Красота заключается в том, что в C++ без свяких frameworks (MFC например) всё это нужно делать ручками ^^
Угу, я вообще стараюсь по возможности OLE/COM не касаться даже =))
VB сам построен в тесном взаимодействии с ним. Тот же String - это BSTR. Поэтому приходится периодически касаться.