Каким браузером смотреть локальные страницы с ? и & в названии

dangerr

Скачал с помощью wget -r -k веб-ресурс. Файлы получились вида
page.php?param1=value1&param2=value2
firefox 3 при переходе по ссылке на такой файл, утверждает, что такого файла не существует. Хотя если ему скормить файл через open, открывает. Midori и uzbl (оба на webkit) пытаются открыть просто файл page.php и тоже само собой не находят.
lynx открывает верный файл, но не в виде отрендеренной страницы, а показывает html-исходники.

Dasar

work-around из готовых модулей: поднять http-прокси, которого научить поднимать такие файлы с диска

dangerr

Это пипец какой костыль, товарищи... Я лучше скриптик напишу, который во всех ссылках заменит эти символы на что-нибудь другое и файлы так переименую. :)

Dasar

Я лучше скриптик напишу, который во всех ссылках заменит эти символы на что-нибудь другое и файлы так переименую.
так да, удобнее. мне с ходу не пришло в голову, что ссылки внутри html-я тоже можно поменять.

serega1604

нужно было добавлять --restrict-file-names=windows

dangerr

Это всё равно геморой. Надо багов чтоли в трекерах насоздавать. Это же логично, что браузер должен понимать, что это локальный файл, а значит после "?" идут не get-переменные, а обычная часть имени.

dangerr

А причём здесь windows? Я и качал, и пытался просмотреть под никсами. Криворукие браузерописатели не знают, что эти символы могут быть допустимыми в именах файлов?

serega1604

при том что в этом режиме "?" эскейпится

dangerr

Попробовать стоит :)
Но всё равно это неправильное решение...

zaqwerd

при том что в этом режиме "?" эскейпится
Он не об этом.
его напрягает что браузер не открывает файл со знаком вопроса в имени!

serega1604

я не настолько дурак, чтобы не понять, в чем проблема.

dangerr

Ну почему же... есть реальная проблема: есть решения правильные и работающие. Если эти множества не пересекаются, то я конечно же воспользуюсь работающим, но отсутствие правильного буду считать багом, о чём сообщу в апстрим.

dangerr

Работает однако! :)
Спасибо.
Но в багтрекеры надо будет всё равно написать.

Dasar

Это же логично, что браузер должен понимать, что это локальный файл, а значит после "?" идут не get-переменные, а обычная часть имени.
но допустим q.html?1 должно открывать скорее файл q.html при локальном использовании
можно, конечно, делать - сначала ищем файл q.html?1, и если не нашли, то берем файл q.html

tokuchu

Ну если в строке браузера писать file://... то это всё же URL будет и в нём ? и & имеют специальное значение. Я думаю, что если их заквотировать через %, то файл откроется. Причём их обязательно нужно квотировать даже.
Кстати, у меня Firefox через "Open file..." сам всё нормально квотирует и показывает. Так что ты что-то делаешь не так.

Dasar

Кстати, у меня Firefox через "Open file..." сам всё нормально квотирует и показывает. Так что ты что-то делаешь не так.
но если в этом файле есть ссылка с ?, то сама она же не заквотируется..

tokuchu

но если в этом файле есть ссылка с ?, то сама она же не заквотируется..
Само собой. Но подозреваю, что если wget-у сказать --convert-links, то он это исправит. Т.к. в случае --restrict-file-names=windows ссылки тоже стали невалидные.

dangerr

но допустим q.html?1 должно открывать скорее файл q.html при локальном использовании
эээм... почему? Если ссылка на "q.html?1", то открывать надо "q.html?1", не надо софту додумывать за людей. У людей думать лучше получается. Откуда вообще по-твоему должна взяться такая ссылка?

dangerr

Кстати, у меня Firefox через "Open file..." сам всё нормально квотирует и показывает.
Прочитай выше, у меня тоже. Проблема только при переходе по ссылке.

dangerr

Т.к. в случае --restrict-file-names=windows ссылки тоже стали невалидные.
У меня наоборот стали валидные. :)

tokuchu

Если ссылка на "q.html?1", то открывать надо "q.html?1", не надо софту додумывать за людей.
Ты неправ.

dangerr

Аргументация на высоте. :)
Прямо даже возразить нечем.

Dasar

ээм... почему? Если ссылка на "q.html?1", то открывать надо "q.html?1", не надо софту додумывать за людей. У людей думать лучше получается. Откуда вообще по-твоему должна взяться такая ссылка?
потому что по духу http (и того же rest после ? идут доп. параметры, которые могут в том числе игнорироваться без потери смысла

tokuchu

Аргументация на высоте. :)
Прямо даже возразить нечем.
Ну у тебя, собственно, тоже не было аргументации должной.
Но вообще КО тебе должен был подсказать где это можно посмотреть:
http://www.w3.org/TR/1999/REC-html401-19991224/types.html#ty...
Ну и там ссылка на секцию [URI], которая ссылается на RFC 2396 "Uniform Resource Identifiers (URI): Generic Syntax". Там описано из каких частей оно состоит. И собственно часть запроса интерпретируется специальным образом. Если мы хотим ссылаться на файл со спецсимволами, то они должны быть заквотированы.

tokuchu

У меня наоборот стали валидные. :)
Без опции "--convert-links" или в случае со спецсимволами оно не сработало?

tokuchu

потому что по духу http (и того же rest после ? идут доп. параметры, которые могут в том числе игнорироваться без потери смысла
Эти параметры в том числе могут использоваться каким-нибудь жаваскриптом в странице.

dangerr

Эти параметры в том числе могут использоваться каким-нибудь жаваскриптом в странице.
Опа! Если так, то я действительно не прав. :)
Я-то думал get-переменные только серверными скриптами обрабатываться могут.

dangerr

Без опции "--convert-links" или в случае со спецсимволами оно не сработало?
с опцией --restrict-file-names=windows и без опции "--convert-links". Файлы теперь называются
page.param1=value1%2param2=value2

Dasar

Я-то думал get-переменные только серверными скриптами обрабатываться могут.
они могут даже браузером добавляться на чистом html-е без js.
например, в форме может быть указано, что она submit-ится через get, тогда все введенные поля пойдут как доп. параметры

tokuchu

они могут даже браузером добавляться на чистом html-е без js.
Это понятно. Ты про добавление их говоришь, а я про то, какой они могут нести смысл без серверной обработки.

dangerr

блин, --convert-links и -k - это одно и то же :)
Тогда с ней я запускал. Вот полная команда.
wget -r -l10 -k --restrict-file-names=windows http://my-site.org/

tokuchu

с опцией --restrict-file-names=windows и без опции "--convert-links". Файлы теперь называются
Ну то, что файлы называются по другому — это понятно. А ссылки внутри файлов тоже исправились что ли?

dangerr

они могут даже браузером добавляться на чистом html-е без js.
например, в форме может быть указано, что она submit-ится через get, тогда все введенные поля пойдут как доп. параметры
Да, я это знаю. Но я ошибочно полагал, что get-запрос обработается только на сервере.

tokuchu

блин, --convert-links и -k - это одно и то же :)
Тогда с ней я запускал. Вот полная команда.
wget -r -l10 -k --restrict-file-names=windows http://my-site.org/
А, всё, я чего-то тоже проглядел у тебя в первом посте. Ну, видимо, не исправляет он такие имена в ссылках. Это может быть и бага вгета.

dangerr

да, исправились.
Вообще, я так подумал, получается, что это баг не браузеров, а wget. Он должен внутри файлов при опции --convert-links (-k) экранировать вопросы в ссылках. Использование --restrict-file-names=windows - это только воркэраунд. Были бы эти символы доступны для имён файлов в windows, он бы не работал.

Werdna

Скачал с помощью wget -r -k веб-ресурс. Файлы получились вида
page.php?param1=value1&m2=value2
man wget
wget -O

dangerr

Ты предлагаешь слить 2.5 килофайла в один? :grin:

tokuchu

Можно ещё попробовать -E (кажется). В общем оно .html в конце приписывает. В мане точнее посмотри.

apl13

Ы-ы-ы.
Вы щас договоритесь до того, что когда вгету дают пачку адресов "pagename.html?*", он будет сохранять один файл pagename.html, внутри которого будет скрипт, ищущий строку после вопросительного знака в списке сохраненных и выдающий соответствующую страницу.

dangerr

Можно ещё попробовать -E (кажется). В общем оно .html в конце приписывает. В мане точнее посмотри.
О, такой воркэраунд тоже работает. :)
Пожалуй, он мне даже больше нравится, чем предыдущий.

dangerr

Не, нафиг. Я хочу это просматривать на e-ink гаджете, вряд ли там интерпретатор js встроен.

tokuchu

О, такой воркэраунд тоже работает. :)
Как и предполагалось, т.к. при этом он как бы вынужден переписать ссылку. А если ничего не менялось, то он не парится, хотя по идее должен бы из-за спецсимволов.
Багу им запости. Я думаю, что это вполне себе баг. Т.к. к тому же если под виндой будешь делать такое, то там по умолчанию этот --restrict-... работает и результат будет нормальный. Т.е. получается не совсем согласованная работа.
Кстати, ещё такой момент, что браузеры могут, например, не считать, что файл html-ный, если у него в конце чего-нибудь другой окажется. Поэтому, наверное, всё же добавлять .html необходимо.

tokuchu

Не, нафиг. Я хочу это просматривать на e-ink гаджете, вряд ли там интерпретатор js встроен.
А файлы с вопросиками он умеет читать? :)

dangerr

Я пока на него не заливал :)

saveliev_a

вряд ли там интерпретатор js встроен
В Kindle вроде есть, так что можешь и в своем посмотреть.

dangerr

Ну в Киндл - там полноценный браузер, так как 3G и можно сёрфить по инету. А в моём lbook интерпретация на уровне html2text наверняка (ну +картинки).

hwh2010

Therefore, I believe that wget -k must change ? to %3F in html-code
необратимые ескейпы — это калский кал!1111111
если на сайте есть страница /page.php, принимающая на вход параметры в виде /page.php?param=1, а также есть (статическая, например) страница /page.php%3Fparam=1 — они при скачивании сохранятся под одним именем (если вгет попатчат согласно реквесту)
ты можешь назвать ебанатом вебмастера, выложившего вторую страницу под таким именем, а я тебе возражу что он просто воспользовался тем же самым попатченным вгетом

Dasar

они при скачивании сохранятся под одним именем
такой конфликт может возникнуть при любой схеме перекодирования, и wget должен такое разруливать и генерить уникальное имя (например, добавкой [2] и т.д.)

hwh2010

такой конфликт может возникнуть при любой схеме перекодирования
если качаешь в пустую директорию и если схема перекодирования взаимно однозначная — как он возникнет?

dangerr

Статические страницы будут таким wget-ом генерироваться с ?, а не с %3F, а %3Fтолько в ссылках будет. Так что веб-мастер, пользующийся тем же wget-ом не создаст такой файл. А вот файл page.php?param=1 - создаст.
Интересно, кстати, как веб-сервер выберет выдать ли этот файл или page.php с параметрами. :)

hwh2010

Интересно, кстати, как веб-сервер выберет выдать ли этот файл или page.php с параметрами.
page.php с параметрами
а чтобы этот файл получить, нужно как раз-таки будет в адресной строке заменить ? на %3F

dangerr

если качаешь в пустую директорию и если схема перекодирования взаимно однозначная — как он возникнет?
Ну, например, ещё есть POST.

hwh2010

Ну, например, ещё есть POST.
как можно достичь коллизии за один запуск вгета?

dangerr

а чтобы этот файл получить, нужно как раз-таки будет в адресной строке заменить ? на %3F
А как тогда получить файл, где в названии реально будет %3F? :grin:

hwh2010

А как тогда получить файл, где в названии реально будет %3F?
написать %XX3F, где XX — код процента

tokuchu

если качаешь в пустую директорию и если схема перекодирования взаимно однозначная — как он возникнет?
Так она и сейчас не взаимно однозначна.

Dasar

если качаешь в пустую директорию и если схема перекодирования взаимно однозначная — как он возникнет?
но если была введена взаимно-однозначная схема перекодирования, то в этой схеме ничего не мешает сделать, чтобы ? и %3F кодировались по разному.
но я о том, что все равно необходимо внедрять какую-то схему борьбы с конфликтами (например, внедряя взаимно-однозначное перекодирование). конфликт в том числе может быть и с запросами вида: a.ru/v/z, a.ru/v//z, a.ru/v///z

dangerr

как можно достичь коллизии за один запуск вгета?
Сразу скажу, что мои знания тут немного могут плавать, так что чур ногами не бить, но насколько я понимаю:
Есть ссылка, где передаётся постом переменная с одним значением параметра, а есть - где с другим. URL у обеих одинаковый, а генерятся на них разные страницы. Так как имена wget делает на основе url, то будет коллизия.

hwh2010

Есть ссылка, где передаётся постом
пост может отправить только форма или скрыпт, а на них вроде -r не распространяется

tokuchu

Есть ссылка, где передаётся постом переменная с одним значением параметра, а есть - где с другим. URL у обеих одинаковый, а генерятся на них разные страницы.
Ссылки не могут привести к POST-запросу.

dangerr

Но скрипт можно сделать вызываемым по ссылке, а там уже передать POST. Хотя есть подозрение, что wget с этим ничего поделать не сможет => получается защита от выкачки сайта. Странно, что ей мало кто пользуется.

hwh2010

получается защита от выкачки сайта.
а заодно и от поисковых систем и от посетителей с тупыми браузерами (напр. с мобильниками)
Странно, что ей мало кто пользуется.
такое делают иногда, но обычно не с целью запретить выкачку. Уж выкачать-то смогут, было бы желание

dangerr

Мда, тогда понятно почему так не делают. Пожалуй, POST - негодный пример. :)

saveliev_a

А как же поискать сначала?

dangerr

Я как-то искал среди открытых только.
Видимо, мой тоже закроют, сказав, что это не баг....

serega1604

"?" в конце урла убери, а то говорят invalid item id :grin:

saveliev_a

Убрал.

tokuchu

А как же поискать сначала?
Странное там оправдание. С ним же можно и не перекодировать, когда используется рестрикт для символов в файлах.
Ну в смысле то, что лучше дописывать .html, конечно, правда. Я выше тоже писал. Но это всё равно не повод забивать на переписывание.

dangerr

Ты, может, сформулируешь это как-нибудь на английском и там же отпишешь? А то также закроют и всё.

apl13

вряд ли там интерпретатор js встроен.
Я говорил про js?

tokuchu

Ты, может, сформулируешь это как-нибудь на английском и там же отпишешь? А то также закроют и всё.
Постараюсь завтра не забыть. :)

dangerr

Я говорил про js?
Обычно его вставляют в html. Интерпретатор чего-нибудь другого ожидать на e-ink, думаю, ещё более бессмысленно.
Оставить комментарий
Имя или ник:
Комментарий: