Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
15-1255770792
Вайка
2009-10-17 13:13
2009.12.20
S. T. A. L. K. E. R. Зов Припяти. Как Вам?


6-1210750482
BioStaR
2008-05-14 11:34
2009.12.20
Отправка сообщений через сокеты!


2-1257257897
Сергей
2009-11-03 17:18
2009.12.20
Как передать процедуру на выполнение в Timer.OnTimer?


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


15-1256145675
palva
2009-10-21 21:21
2009.12.20
Неполадки в форуме?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский