Форум: "Основная";
Текущий архив: 2009.12.20;
Скачать: [xml.tar.bz2];
Вниз
Как открыть длинный URL в браузере? Найти похожие ветки
← →
Tack © (2008-12-09 22:31) [0]ShellExecute при попытке открыть длинный URL обрезает его до 2083 символов.
А нужно стартануть URL длиной в 4К.
Подскажите, как обойти проблему, не используя внешние файлы (вроде загрузки из подготовленного html с редиректом)
← →
Германн © (2008-12-10 01:00) [1]
> Tack © (09.12.08 22:31)
>
> ShellExecute при попытке открыть длинный URL обрезает его
> до 2083 символов.
> А нужно стартануть URL длиной в 4К.
>
Действительно нужно?
Что за извращение?
← →
Jeer © (2008-12-10 01:39) [2]
> Что за извращение?
>
"Война и мир" в сокращенном варианте.
← →
Германн © (2008-12-10 01:41) [3]
> Jeer © (10.12.08 01:39) [2]
"войну и мир" я смог прочитать. :)
А вот "Сагу о Форсайтах" увы!
← →
Jeer © (2008-12-10 01:47) [4]
> "войну и мир" я смог прочитать. :)
В 4к варианте ? :))
← →
Германн © (2008-12-10 01:53) [5]
> Jeer © (10.12.08 01:47) [4]
>
>
> > "войну и мир" я смог прочитать. :)
>
>
> В 4к варианте ? :))
>
В 4т варианте. Да. Прочёл. И кое-что понял. И, иногда, некоторые отрывки доставляли мне удовольствие.
← →
Tack © (2008-12-10 07:39) [6]Ну вот есть такие URL-и, да. Когда в URL вставляется хэш-код, идентифицирующий пользователя.
Так есть предположения?
← →
KSergey © (2008-12-10 07:50) [7]> Tack © (10.12.08 07:39) [6]
> Ну вот есть такие URL-и, да. Когда в URL вставляется хэш-
> код, идентифицирующий пользователя.
>
> Так есть предположения?
Вероятно можно зайти через COM-автоматизацию эксплорера (только ен говорите, что еще и другой браузер принципиалет) и попробовать сделать это оттудава.
Но вооще 4К гонять по сути вхолостую при каждом запросе - что-то в технологии явно не то. Та же задача явно решается иначе, проще и изящнее.
← →
KSergey © (2008-12-10 08:02) [8]Гы-гы-гы
Тщательно изучая содержимое сайта по ссылке из поста [10] ветки http://tinyurl.com/5vjaxe (внимание! ссылка ведет на этот форум, а не куда-то еще!) наткнутлся вот на что.
Специально для автора! Все уже придумано! Сократитель сылок!
http://tinyurl.com/
← →
sniknik © (2008-12-10 08:04) [9]> Так есть предположения?
сделать по другому... т.к. на данные в параметрах GET запроса есть ограничение на длину. имхо, т.к. помню смутно, читал, вроде есть. вот что будет при вставке этого url четырех килобайтного в строку браузера?
и на размер выполняемой строки есть ограничения... (делал как то так вставку письма в текущую почтовую программу, так тоже в какой то момент перестало все передавать, размер формируемого тела превысил границу... пришлось перейти на imapy только изза этого... и ничего)
> Так есть предположения?
получать этот идентификатор по POST (Ajax и иже с ними, что там еще есть) из страници, вставлять непосредственно в страничку, сделать хэш-код поменьше, сделать авторизацию стандартными средствами... да мало ли чего еще можно придумать, главное чтобы подошло применительно к ситуации... (которой мы кстати не знаем).
← →
Anatoly Podgoretsky © (2008-12-10 09:05) [10]
> вот что будет при вставке этого url четырех килобайтного
> в строку браузера?
Вот это надо проверить в первую очередь, иначе нет смысла двигаться дальше.
← →
Tack (2008-12-10 09:20) [11]
> Специально для автора! Все уже придумано! Сократитель сылок!
>
> http://tinyurl.com/
Это хорошо, конечно, но сайт, на который ссылка, не мой, и я правила формирования URL не устанавливаю.
В адресную строку любого браузера ссылка в 4К вставляется нормально и браузер переходит и все работает.
Через COM-интерфейс эксплорера сделать можно, а вот как сделать, чтобы в дефолтном системном браузере открывалось нормально?
← →
Anatoly Podgoretsky © (2008-12-10 09:57) [12]> Tack (10.12.2008 9:20:11) [11]
Отлично, значит можешь переходить ко второму варианту - используй CreateProcess + FindExecutable
← →
clickmaker © (2008-12-10 15:52) [13]> Когда в URL вставляется хэш-код, идентифицирующий пользователя
это ж какой длины хэш-код?
и почему это делается через GET, а не через POST?
← →
Ega23 © (2008-12-11 12:35) [14]
> и почему это делается через GET, а не через POST?
А как ты post-параметры передашь странице? Я, в принципе, могу понять длинный URL. Ну там, pageId, userId, ещё какая-нибудь лабуда.
Но URL длиной в 500 символов - это уже какое-то извращение. Туда как минимум десяток GUID-ов запихать можно.
← →
Palladin © (2008-12-11 12:52) [15]GET запрос не может быть больше 2Kb
← →
clickmaker © (2008-12-11 12:59) [16]> А как ты post-параметры передашь странице?
а как передаются всякие логины-пароли? не через Post же
← →
clickmaker © (2008-12-11 13:07) [17]> не через Post же
то есть, не через Get же )
вообще, информацию, которая представляет некоторую ценность (коды, пароли всякие) в открытом виде через урл лучше не передавать
← →
Ega23 © (2008-12-11 13:19) [18]
> а как передаются всякие логины-пароли? не через Post же
Ну ты же это дело не странице передаёшь, а серверу.
А странице, насколько я понимаю, какую-то информацию можно передать только:
1. Внутри контента респонса на http-reqwest
2. В виде куки.
3. В строке URL.
А так, с точки зрения CGI или FastCGI, GET - это то, что через переменные окружения пришло, POST - то что в StdIn было запихнуто.
Поправьте меня, если я не прав.
← →
clickmaker © (2008-12-11 13:23) [19]> не странице передаёшь, а серверу
так... теперь я не понял.
Какая разница? страница формируется на сервере. Значит "передать странице" = "передать серверу"
Поправьте меня, если я не прав
← →
Anatoly Podgoretsky © (2008-12-11 13:31) [20]> Ega23 (11.12.2008 13:19:18) [18]
Ты неправ.
← →
Anatoly Podgoretsky © (2008-12-11 13:31) [21]> Ega23 (11.12.2008 13:19:18) [18]
Ты неправ.
← →
Ega23 © (2008-12-11 13:32) [22]
> Значит "передать странице" = "передать серверу"
Вот насколько я понимаю, это не совсем так. Точнее - не обязательно. В случае, когда идёт пост-обработка данных на странице уже после получения контента.
Пример:
А, ччёрт, html-тэги поди тут не пропустит. Ну да ладно.
Короче, внутри body есть только один div с id="mydiv"
Дальше в head добавляем такой скрипт:
function GetLocationParam(name) {
var params = window.location.search.substr(1).split("&");
for(i=0;i<params.length;i++) {
var param=params[i].split("=");
if (param[0]==name) {
return param[1];
}
}
return "";
}
function OnLoad() {
var MyParam = GetLocationParam("id");
var el = document.getElementById("mydiv");
if (el) {
el.innerHTML = MyParam;
}
}
window.onload = OnLoad;
И теперь вызываем страницу с доп.параметром?id=siahfbiashbfdihb
И таких параметров через URL можно передать немало.
← →
Ega23 © (2008-12-11 13:36) [23]
> GET - это то, что через переменные окружения пришло
Точнее, через переменную окружения "QUERY_STRING"
← →
clickmaker © (2008-12-11 13:38) [24]так это же у тебя клиентский скрипт.
Если ты это имел в виду под "передать странице", то да
На самом деле, при передаче данных, которые не влезают в урл (или которые не желательно туда пихать), есть 2 способа:
1. AJAX-запрос какому-нибудь http-хэндлеру или веб-сервису, который возвращает нечто, что можно тут же применить к документу. Через клиентский скрипт.
2. POST-запрос через submit или АЯКС, опять же. Сервер в случае необходимости может отредиректить пользователя на нужную страницу после получения и обработки запроса (как в случае логина, например).
← →
Ega23 © (2008-12-11 13:54) [25]
> На самом деле, при передаче данных, которые не влезают в
> урл (или которые не желательно туда пихать), есть 2 способа:
>
> 1. AJAX-запрос какому-нибудь http-хэндлеру или веб-сервису,
> который возвращает нечто, что можно тут же применить к
> документу. Через клиентский скрипт.
> 2. POST-запрос через submit или АЯКС, опять же. Сервер в
> случае необходимости может отредиректить пользователя на
> нужную страницу после получения и обработки запроса (как
> в случае логина, например).
>
правильно. Вот теперь такая ситуация:
1. Есть система, в которой пользователю надо авторизоваться.
2. В зависимости от прав пользователя контент на странице может быть разный (например, добавляются дополнительные кнопки).
В этом случае имеем 2 стриницы:
1. С окошком Login-Pwd
2. Основная страница.
На странице авторизации пользователь вводит логин-пароль, это через post-запрос попадает на сервер. Сервер это дело переваривает и в случае успешной авторизации у нас есть 2 пути:
Путь 1. Сервер полностью генерит всю основную страницу целиком, в зависимости от прав пользователя.
Путь 2. Сервер переадресует пользователя на основную страницу, добавив параметром URL его (пользователя) id.
На основной странице происходит то, что я выше в примере привёл, только вместо тупого вывода в innerHTML организуется AJAX-запрос с post (или get, лично через post делаю) - параметром UserID. Который был взят из URL.
И вот уже только тогда сервер обрабатывает права пользователя с данным id и высылает ответ, в котором сформирован только набор кнопок, а не вся страница целиком.
← →
clickmaker © (2008-12-11 13:59) [26]> в котором сформирован только набор кнопок, а не вся страница
> целиком
а смысл?
страница и так формируется целиком в момент, когда "Сервер переадресует пользователя на основную страницу"
путь, в котором сформирован только набор кнопок, имеет смысл только когда пользователь не покидает основную страницу. Что-то типа быстрого переключения юзера.
← →
b z (2008-12-11 14:01) [27]
> clickmaker © (10.12.08 15:52) [13]
> и почему это делается через GET, а не через POST?
Хм ... а как передать post посредствам [0], т.е. ShellExecute ... ?
> Ega23 © (11.12.08 13:54) [25]
> Путь 2.
А в чем смысл этих "плясок", зачем лишний раз делать запрос, если можно сразу сгенерить ... или вы чегото не досказали?
← →
Ega23 © (2008-12-11 14:07) [28]
> а смысл?
А в том, что всю страницу чисто на разметке формировать - застрелиться можно. С другой стороны, на сервере лежат "шаблоны" страниц, в которых уже определены стили, сделана какая-то предварительная разметка и т.д.
Грубо говоря, это всё-равно что ты модальную форму генеришь полностью из метода, ну типа:procedure TForm1.InvokeSomeModalForm(Some_Params);
var
frm : TForm;
memo : TMemo;
btnOK, btnCancel : TButton;
begin
frm := TForm.Create(nil);
try
frm.SetBounds(....);
memo := TMemo.Create(frm);
memo.Parent := frm;
memo.SetBounds(....);
memo.Lines.Assign(Some_Params.MemoData);
btnOK := TButtonCreate(frm);
............
frm.ShowModal;
if frm.ModalResult = ....
finally
frm.Free;
end;
end;
Можно так сделать? Да легко. только каждую форму так описывать - гемор.
Вот, ИМХО, такая же фигня с полной генерацией разметки страницы на сервере.
← →
clickmaker © (2008-12-11 14:18) [29]> Подскажите, как обойти проблему, не используя внешние файлы
а если создать временный *.url файл и скормить его браузеру?
← →
clickmaker © (2008-12-11 14:21) [30]> А в том, что всю страницу чисто на разметке формировать
> - застрелиться можно. С другой стороны, на сервере лежат
> "шаблоны" страниц, в которых уже определены стили
так а в чем проблема на сервере это формировать?
грубо говоря, есть шаблон
<html>
%ADMIN_BUTTONS%
%USER_BUTTONS%
...
для обычного юзера %ADMIN_BUTTONS% заменяется пустой строкой. Это если какой-то скриптовый язык типа пхп.
В aspx это вообще решается установкой Visible контролам
← →
b z (2008-12-11 14:23) [31]
> А в том, что всю страницу чисто на разметке формировать
Вы имеете ввиду весь код страницы стрингами конкатенировать? Такого уже давно никто не делает. Для этого куча движков написано. Например асп.нет посмотрите.
← →
Ega23 © (2008-12-11 14:27) [32]
> Например асп.нет посмотрите.
По условиям моей задачи, у меня только Apach + cgi/fastcgi
← →
b z (2008-12-11 14:36) [33]
> Ega23 © (11.12.08 14:27) [32]
> По условиям моей задачи, у меня только Apach + cgi/fastcgi
Когда-то у нас тоже была похожая ситуация, но мы решили ее подругому.
Составили документ в котором указали, что перейдя на другую платформу мы поимеем прирост производительности, скорость разработки (даже с учетом репликации серверов. - так оно было) и простоту поддуржки, ну как итог - эконом. выгоду. И послали его заказчику. Нам "поверили", в итоге мы получили премию в размере 2 окладов. :)
Кстати а вот микрософт заявило что пхп под иисом вертится шустрее чем на апач. Это я так, вроде там у вас кросплатформенность была.
← →
Ega23 © (2008-12-11 14:40) [34]
> Кстати а вот микрософт заявило что пхп под иисом вертится
> шустрее чем на апач.
У меня нет никакого пхп. Голый apache + cgi/fastcgi.
← →
b z (2008-12-11 16:51) [35]
> Ega23 © (11.12.08 14:40) [34]
> Голый apache + cgi/fastcgi.
Можно подумать в сторону XSL Transformations, подыскать енжин подходящий ...
← →
Ega23 © (2008-12-11 17:04) [36]
> Можно подумать в сторону XSL Transformations, подыскать
> енжин подходящий ...
Зачем? Я не генерю AJAX-ответы в виде HTML, я их в JSON-формате возвращаю, потом ему eval делаю - и у меня готовый JavaScript-объект, с кучей свойств.
А поскольку те же YUI-компоненты (от Yahoo) на чистом JavaScript написаны и данные в целом только такие данные и понимают, то такой вариант мне гораздо проще.
Фактически, у меня с сервера приходит что-то типа
var data1 = {
treedata:
[
{type:"Text", label:"Рыба", expanded:true, children:
[
{type:"Text", label"Судак", id:"f1"},
{type:"Text", label:"Окунь", id:"f2"},
{type:"Text", label:"Щука", id:"f3"},
{type:"Text", label:"Карась", id:"f4"}
]
},
{type:"Text", label:"Птица", expanded:true, children:
[
{type:"Text", label:"Орёл", id:"s1"},
{type:"Text", label:"Воробей", id:"s2"},
{type:"Text", label:"Ворона", id:"s3"},
{type:"Text", label:"Другая пцыца", id:"s4"}
]
},
],
menudata:[
{ text: "Добавить", id:"act1"},
{ text: "Изменить", id:"act2"},
{ text: "Удалить", id:"act3"}
]
};
И я, подставив в YUI.TreeView массив data1.treedata, а в YUI.ContextMenu массив Data1.menudata получаю готовое дерево с привязанным к нему контекстным меню. А данные и действия в меню - в зависимости от прав пользователя.
И мне нафиг не нужно заморачиваться, какой сейчас дизайн у страницы. Мне нужен один единственный div с определённым id, на котором это дерево с меню будет развёрнуто.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2009.12.20;
Скачать: [xml.tar.bz2];
Память: 0.57 MB
Время: 0.005 c