Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.12.20;
Скачать: CL | DM;

Вниз

Как открыть длинный 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;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.013 c
15-1256243411
Юрий
2009-10-23 00:30
2009.12.20
С днем рождения ! 23 октября 2009 пятница


2-1256962231
xucc
2009-10-31 07:10
2009.12.20
Помогите найти компонент NxCustomGridControl.pas


15-1256021069
ocean
2009-10-20 10:44
2009.12.20
Ночной кошмар


1-1228221387
Yozch1
2008-12-02 15:36
2009.12.20
не работает CTRL-C !!!!


1-1228989583
venoel
2008-12-11 12:59
2009.12.20
Обработка неверно введеного значения