Як відкрити довгий url в браузері

Як відкрити довгий URL в браузері?

ShellExecute при спробі відкрити довгий URL обрізає його до 2083 символів.
А потрібно стартанути URL довжиною в 4К.

Підкажіть, як обійти проблему, не використовуючи зовнішні файли (на кшталт завантаження з підготовленого html з перенаправленням)

"Війна і мир" в скороченому варіанті.


> "Війну і мир" я зміг прочитати. )

Ну ось є такі URL-й, так. Коли в URL вставляється хеш-код, що ідентифікує користувача.

Так є припущення?

> Так є припущення?
зробити по іншому. тому на дані в параметрах GET запиту є обмеження на довжину. имхо, тому що пам'ятаю смутно, Новомосковскл, начебто є. ось що буде при вставці цього url чотирьох кілобайтний в рядок браузера?
і на розмір виконуваної рядки є обмеження. (Робив як то так вставку листа в поточну поштову програму, так теж в якийсь момент перестало все передавати, розмір формованого тіла перевищив кордон. Довелося перейти на imapy тільки через це. І нічого)


> Ось що буде при вставці цього url чотирьох кілобайтний
> В рядок браузера?

Ось це треба перевірити в першу чергу, інакше немає сенсу рухатися далі.

Через COM-інтерфейс експлорера зробити можна, а ось як зробити, щоб в дефолтних системному браузері відкривалося нормально?

Дуже добре, значить можеш переходити до другого варіанту - використовуй CreateProcess + FindExecutable

> Коли в URL вставляється хеш-код, що ідентифікує користувача

це ж якої довжини хеш-код?
і чому це робиться через GET, а не через POST?


> І чому це робиться через GET, а не через POST?

А як ти post-параметри передаси сторінці. Я, в принципі, можу зрозуміти довгий URL. Ну там, pageId, userId, ще якась лабуда.
Але URL довжиною в 500 символів - це вже якесь збочення. Туди як мінімум десяток GUID-ів запхати можна.

GET запит не може бути більше 2Kb

> А як ти post-параметри передаси сторінці?

а як передаються всякі логіни-паролі? НЕ через Post ж

»Не через Post ж

тобто, не через Get ж)
взагалі, інформацію, яка представляє деяку цінність (коди, паролі всякі) у відкритому вигляді через урл краще не передавати


> А як передаються всякі логіни-паролі? НЕ через Post ж

Ну ти ж це справа не сторінці передаєш, а сервера.
А сторінці, наскільки я розумію, якусь інформацію можна передати тільки:
1. Усередині контенту респонса на http-reqwest
2. У вигляді куки.
3. У рядку URL.

А так, з точки зору CGI або FastCGI, GET - це те, що через змінні оточення прийшло, POST - то що в StdIn було запхати.

Виправте мене, якщо я не правий.

»Не сторінці передаєш, а сервера

так. тепер я не зрозумів.
Яка різниця? сторінка формується на сервері. Значить "передати сторінці" = "передати сервера"
Виправте мене, якщо я не правий


> Значить "передати сторінці" = "передати сервера"

Ось наскільки я розумію, це не зовсім так. Точніше - не обов'язково. У разі, коли йде пост-обробка даних на сторінці вже після отримання контенту.
приклад:

А, ччёрт, html-теги піди тут не пропустить. Ну да ладно.
Коротше, всередині body є тільки один div з id = "mydiv"
Далі в head додаємо такий скрипт:


function GetLocationParam (name) # XA0; var params = window.location.search.substr (1) .split ( "");
# XA0; for (i = 0; i # XA0; # XA0; if (param [0] == name) # XA0; # XA0; # XA0; return param [1];
# XA0; # XA0;>
# XA0;> # XA0;
# XA0; return "";
>

function OnLoad () # XA0; var MyParam = GetLocationParam ( "id");
# XA0; var el = document.getElementById ( "mydiv");
# XA0; if (el) # XA0; # XA0; el.innerHTML = MyParam;
# XA0;>
>

І тепер викликаємо сторінку з доп.параметром? Id = siahfbiashbfdihb

І таких параметрів через URL можна передати чимало.


> GET - це те, що через змінні оточення прийшло

Точніше, через змінну оточення "QUERY_STRING"

так це ж у тебе клієнтський скрипт.
Якщо ти це мав на увазі під "передати сторінці", то так

Насправді, при передачі даних, які не влазять в урл (або які не бажано туди пхати), є 2 способи:
1. AJAX-запит якомусь http-Хендлер або веб-сервісу, який повертає щось, що можна тут же застосувати до документа. Через клієнтський скрипт.
2. POST-запит через submit або АЯКС, знову ж. Сервер в разі необхідності може отредіректіть користувача на потрібну сторінку після отримання та обробки запиту (як у випадку логіна, наприклад).


> Насправді, при передачі даних, які не влазять в
> Урл (або які не бажано туди пхати), є 2 способи:
>
> 1. AJAX-запит якомусь http-Хендлер або веб-сервісу,
> # XA0; який повертає щось, що можна тут же застосувати до
> Документу. Через клієнтський скрипт.
> 2. POST-запит через submit або АЯКС, знову ж. сервер в
> Якщо буде потреба може отредіректіть користувача на
> Потрібну сторінку після отримання та обробки запиту (як
> У разі логіна, наприклад).
>

У цьому випадку маємо 2 стрініци:
1. З віконцем Login-Pwd
2. Головна сторінка.

шлях, в якому сформований тільки набір кнопок, має сенс лише тоді, коли користувач не покидає основну сторінку. Щось типу швидкого перемикання користувача.

А в тому, що всю сторінку чисто на розмітці формувати - застрелитися можна. З іншого боку, на сервері лежать "шаблони" сторінок, в яких вже визначені стилі, зроблена якась попередня розмітка і т.д.

Грубо кажучи, це все-одно що ти модальну форму генерітся повністю з методу, ну типу:

procedure TForm1.InvokeSomeModalForm (Some_Params);
var
# XA0; frm. TForm;
# XA0; memo. TMemo;
# XA0; btnOK, btnCancel. TButton;

begin
# XA0; frm: = TForm.Create (nil);
# XA0; try
# XA0; # XA0; frm.SetBounds (.);

# XA0; # XA0; memo: = TMemo.Create (frm);
# XA0; # XA0; memo.Parent: = frm;
# XA0; # XA0; memo.SetBounds (.);
# XA0; # XA0; memo.Lines.Assign (Some_Params.MemoData);
# XA0; # XA0;
# XA0; # XA0; btnOK: = TButtonCreate (frm);

# XA0; # XA0; frm.ShowModal;
# XA0; # XA0; if # XA0; frm.ModalResult =.

Можна так зробити? Та легко. тільки кожну форму так описувати - гемор.

Ось, ІМХО, така ж фігня з повною генерацією розмітки сторінки на сервері.

> Підкажіть, як обійти проблему, не використовуючи зовнішні файли

а якщо створити тимчасовий * .url файл і згодувати його браузеру?

> А в тому, що всю сторінку чисто на розмітці формувати
> - застрелитися можна. З іншого боку, на сервері лежать
> "Шаблони" сторінок, в яких вже визначені стилі

так а в чому проблема на сервері це формувати?
грубо кажучи, є шаблон

% ADMIN_BUTTONS%
% USER_BUTTONS%
.
для звичайного користувача% ADMIN_BUTTONS% замінюється символом нового рядка. Це якщо якийсь скриптова мова типу пхп.
У aspx це взагалі вирішується установкою Visible контролю


> А в тому, що всю сторінку чисто на розмітці формувати
Ви маєте на увазі весь код сторінки стрінгами конкатеніровать? Такого вже давно ніхто не робить. Для цього купа движків написано. Наприклад асп.нет подивіться.


> Наприклад асп.нет подивіться.

За умовами мого завдання, у мене тільки Apach + cgi / fastcgi


> До речі а ось Микрософт заявило що пхп під іісом крутиться
> Спритніше ніж на апач.

У мене немає ніякого пхп. Голий apache + cgi / fastcgi.


> Можна подумати в сторону XSL Transformations, підшукати
> Енжін відповідний.

І я, підставивши в YUI.TreeView масив data1.treedata, а в YUI.ContextMenu масив Data1.menudata отримую готове дерево з прив'язаним до нього контекстним меню. А дані і дії в меню - в залежності від прав користувача.
І мені нафіг не потрібно морочитися, який зараз дизайн у сторінки. Мені потрібен один єдиний div з певним id, на якому це дерево з меню буде розгорнуто.

Пам'ять: 0.83 MB
Час: 0.048 c