forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Библиотеки (http://forum.boolean.name/forumdisplay.php?f=124)
-   -   Lib_proweb - полноценная работа с http! Рабочий POST!!! (http://forum.boolean.name/showthread.php?t=8417)

minibt 01.06.2009 17:31

Lib_proweb - полноценная работа с http! Рабочий POST!!!
 
Вложений: 2
Lib_proweb - работа с http. Перекодировка для русского языка. Возможность загрузки данных в отдельном потоке. Прерывание загрузки с получением загруженной части. Полностью рабочий метод POST!!! Вывод ошибок работы. Кодирование Base64. Распаковка GZIP потоков (сейчас только LZ77).

Для создания, соединения, настройки, закрытия

procedure open(url: String);
Создает соединение с указаным url.

procedure set_property(key, value: string);
Устанавливает свойство key c значением value.

procedure set_method(s: String);
Метод GET или POST

procedure set_body(s: String);
Устанавливает текст запроса для метода POST

function request(): integer;
Устанавливает соединение и возвращает ответ сервера.

function get_field(key: String): string;
Возвращает значение заголовка по названию key от сервера.

function get_fieldvalue(int s): string;
Возвращает значение заголовка по индексу или пустую строку, если индекс превышен.

function get_fieldkey(int s): string;
Возвращает название заголовка по индексу или пустую строку, если индекс превышен.

function get_cookie(): string;
Возвращает ВСЕ cookie одной строкой.

procedure close();
Закрывает соединение, очищает все данные.

Для установленного соединения

function get_data_bg(): integer;
Возвращает значение состояния загрузки данных.
0 - загрузка данных еще продолжается.
1 - загрузка данных окончена. Данные могут быть получены через get_data() или get_stream()

procedure get_data_stop();
Останавливает процесс загрузки данных. Закрывает соединение, а загруженные данные можно получить через get_stream();

function get_stream(): string;
Возвращает значение входного потока. Все данные которые загружены на данный момент.

function get_data(): string;
Ожидает окончания загрузки всех данных и возвращает загруженные данные.
Получение больших данных может занимать много времени, программа будет простаивать, лучше использовать get_data_bg или get_stream.

Легкое соединение!

procedure q_property(key, value: string);
Устанавливает свойство key c значением value для функции q_request.

function q_request(url, method, body, gz: string): integer;
Создает соединение с url, методом method и телом body, вспомогательным параметром gz и возвращает ответ сервера.
Заголовки предварительно установить с помощью q_property.
Параметр gz может иметь слудующие значения:
"gzip" - если сервер поддерживает сжатие, загружает данные в сжатом виде gzip, get_datа вернет распакованные данные, в случае ошибки распаковки ничего.
"auto" - аналогично gzip, но в случае ошибки распаковки автоматически перезагрузить указанный url в несжатом виде.
"none" - используется обычная загрузка без сжатия.
Также автоматически определяет кодировку и перекодирует при возможности входные данные.
Поддерживает UTF-8, и кириллические русские Windows-1251, ISO-8859-5, MacCyrillic, KOI8-R.
Функия поддерживает автоматическую переадресацию.

function q_get_uri(): string;
Возвращает URI соединения, например, в случае переадресации URL. Или пустую строчку.

Вспомогательные

function get_error(): string;
После выполнения процедуры, возвращает описание ошибки, или пустую строчку если нет ошибки.

function gunzip(gz_d: string): string;
Возвращает распакованный архив из строки gz_d.

function gz_ratio(): integer;
После распаковки возвращает степень сжатия.

function str2rs(s: String): resource;
Переводит строчку s в ресурс.

function rs2str(res: resource): string;
Переводит ресурс res в строчку.

function encode(s, e, def: String): string;
Берет строчку s в кодировке e (значения "utf-8", "Windows-1251", "ISO-8859-5","MacCyrillic", "KOI8-R") и возвращает в Unicode.
В случае невозможности перекодировки возвращает строчку def.

function base64_encode(String encoded): string;
Возвращает закодированную строку encoded в формате base64.

function base64_decode(String decoded): string;
Возвращает раскодированную строку decoded в формате base64.

Cм. пример. Метод POST. Подключение к http://forum.boolean.name/ и вход :)
Возможны и недочеты ;) ошибки, пожелания принимаются.

AVIZO 01.06.2009 23:11

Ответ: Lib_proweb - полноценная работа с http! Рабочий POST!!!
 
Хороший человек :)

Skythrone 01.07.2009 15:26

Ответ: Lib_proweb - полноценная работа с http! Рабочий POST!!!
 
Ну вот совсем никак не распаковывается gzip-ованная строка.
Я уж по-разному пробовал.
Вызываю в мидлете gunzip(string) и получаю "Error in GZip".

Хотя строчка реально правильно запакована в GZip (с помощью стандартных функций PHP).

Не подскажете, в чём может быть проблема?

odd 01.07.2009 17:07

Ответ: Lib_proweb - полноценная работа с http! Рабочий POST!!!
 
Ещё неплохо бы добавить функцию по перекодировке потенциально опасных для MySQL и MS SQL баз данных символов (", ', |, ` и др.). Да и символ & открыто передавать нельзя - это приведет к ошибке. Нужно заменять такие символы на сочетание типа %26 для знака & и т.д.

Phantom 01.07.2009 21:55

Ответ: Lib_proweb - полноценная работа с http! Рабочий POST!!!
 
Цитата:

Ещё неплохо бы добавить функцию по перекодировке потенциально опасных для MySQL и MS SQL баз данных символов (", ', |, ` и др.)
Нее, этим не браузер должен заниматься, а сервер.
Цитата:

Да и символ & открыто передавать нельзя - это приведет к ошибке. Нужно заменять такие символы на сочетание типа %26 для знака & и т.д.
Символ & открыто передавать нельзя. Ещё символ "равно" нельзя. Пробел нужно менять на "плюс", остальные символы не a-z0-9 желательно перекодировать в %xx, но обычно и так прокатывает вроде, гг. А вообще, может джава машина сама это делает?

minibt 01.08.2009 13:11

Re: Ответ: Lib_proweb - полноценная работа с http! Рабочий POST!!!
 
Цитата:

Сообщение от Skythrone (Сообщение 109560)
Ну вот совсем никак не распаковывается gzip-ованная строка.
Я уж по-разному пробовал.
Вызываю в мидлете gunzip(string) и получаю "Error in GZip".

Хотя строчка реально правильно запакована в GZip (с помощью стандартных функций PHP).

Не подскажете, в чём может быть проблема?

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

Richik 19.08.2009 00:10

Ответ: Lib_proweb - полноценная работа с http! Рабочий POST!!!
 
Скачиваю с инета статическую картинку, в фотрмате GIF89. Как ее посмотреть на экране?, и можно ли обойтись без сохранения в ее в телефоне?

На экране вот эта картинка " " отображается так:

Код:

GIF89a  жg рстэээшщщчшшццчноп·»Б*±¶Ј©°ъъъщъъёЅГпрс»АЕьььђ•њ›*§і·јуууЋ’™ххцz~†Њђ—x|ѓќЈЄЉЏ–БЕКёјБ»ѕВррт—›ЎҐ©Їґ·»*І№шшщ”™*№ѕГ№»їсстДЕЙуффЇі№¤¦¬лмнЗЙМъъы™ћҐ»їДќЎ¦„€Џ~ѓЉґёѕсту°µ»ёЅВмноµ№ѕІ·Ѕі·ЅЅБЖттуw{ѓ{Ђ‡ъыыщщщ±¶јКОУЅБЗ‚…Њі·»рсс—њЈ‡Њ“±ґ№ффхѕВЗопрГЗЛћ¤¬—›ўЁ*ґежи°ґ№“—ћ*¦**Ґ«ѓ€Џ€Њ“стттуу±µ»©*І}‚‰ТУЦ*°¶ђ•›ннпыыы·јВєѕДИМРҐ«Іяяяяяя                                                                        !щ  g ,       іЂ]M$63ZRI,-ggd’““B^4Џ
c›њњ
 ЏKf¤Ґ¦ &ЏCf!T.G#0';f P bїАї O/»NeИЙКfL9¦СfS8f Af"YF+Qf_Ef5f       
(X f%[UfaaлJ fЏnи0 Ђѓ        Ђи3sеQЃ
в Ј@Ђ™ЏАђfЉИ#d@bE.фP ;


<-TzX-> 19.08.2009 14:40

Ответ: Lib_proweb - полноценная работа с http! Рабочий POST!!!
 
Вложений: 1
Цитата:

Сообщение от Richik (Сообщение 115147)
Скачиваю с инета статическую картинку, в фотрмате GIF89. Как ее посмотреть на экране?, и можно ли обойтись без сохранения в ее в телефоне?

На экране вот эта картинка " " отображается так:

Код:

GIF89a  жg рстэээшщщчшшццчноп·»Б*±¶Ј©°ъъъщъъёЅГпрс»АЕьььђ•њ›*§і·јуууЋ’™ххцz~†Њђ—x|ѓќЈЄЉЏ–БЕКёјБ»ѕВррт—›ЎҐ©Їґ·»*І№шшщ”™*№ѕГ№»їсстДЕЙуффЇі№¤¦¬лмнЗЙМъъы™ћҐ»їДќЎ¦„€Џ~ѓЉґёѕсту°µ»ёЅВмноµ№ѕІ·Ѕі·ЅЅБЖттуw{ѓ{Ђ‡ъыыщщщ±¶јКОУЅБЗ‚…Њі·»рсс—њЈ‡Њ“±ґ№ффхѕВЗопрГЗЛћ¤¬—›ўЁ*ґежи°ґ№“—ћ*¦**Ґ«ѓ€Џ€Њ“стттуу±µ»©*І}‚‰ТУЦ*°¶ђ•›ннпыыы·јВєѕДИМРҐ«Іяяяяяя                                                                        !щ  g ,      іЂ]M$63ZRI,-ggd’““B^4Џ
c›њњ
 ЏKf¤Ґ¦ &ЏCf!T.G#0';f PbїАїO/»NeИЙКfL9¦СfS8fAf"YF+Qf_Ef5f       
(Xf%[UfaaлJ fЏnи0 Ђѓ        Ђи3sеQЃ
вЈ@Ђ™ЏАђfЉИ#d@bE.фP ;


Есть либа для показа изображений не из ресурса, а "по-ссылке". Тебе нужно использовать ее для корректного отображения картинки

IvanSCM 07.02.2010 17:29

Ответ: Lib_proweb - полноценная работа с http! Рабочий POST!!!
 
на сервер не передаются параметры, что GET что POST

Код:

program NewProject3;
uses proweb;
var itemId, rc, id : integer;
    cmdNext : command;
    cmdQuit : command;
    name, str : string;

begin
  ShowForm;
   
  itemId := FormAddTextField('Введите текст:', '', 20, TF_ANY);
   
  cmdNext := CreateCommand('Готово', CM_OK, 1);
  AddCommand(cmdNext);
   
  repeat until GetClickedCommand = cmdNext;
   
  name := FormGetText(itemId);

        ClearForm;
        ShowForm;
       
        id:= FormAddString('Ждите посылка запроса...');
        q_property('Accept', '*/*');
q_property('Accept-Language', 'ru');
q_property('Content-Type', 'application/x-www-form-urlencoded');
 
rc:=q_request('http://talk.servehttp.com', GET, 'foo=bar&name=' + name, 'none');
if get_error='' then str:=get_data;
if get_error=''
      then begin
                                          id:= FormAddString('Ответ: '+ str);
                                        end;
                  else id:= FormAddString(' Ошибка: '+get_error);
close;

  cmdQuit := CreateCommand('Выход', CM_EXIT, 1);
  AddCommand(cmdQuit);
  repeat until GetClickedCommand = cmdQuit;
 
  end.


cherepets 07.02.2010 22:05

Ответ: Lib_proweb - полноценная работа с http! Рабочий POST!!!
 
русские буквы и часть символов нельзя передать, нужно их кодировать, может в этом дело?

IvanSCM 08.02.2010 09:18

Ответ: Lib_proweb - полноценная работа с http! Рабочий POST!!!
 
даже если составить запрос:
Код:

rc:=q_request('http://talk.servehttp.com', GET, 'foo=bar', 'none');
параметры не приходят...

cherepets 08.02.2010 09:21

Ответ: Lib_proweb - полноценная работа с http! Рабочий POST!!!
 
если ты ГЕТ используешь, то можно и без библиотеки, просто к адресу прибавляешь ?foo=bar

IvanSCM 08.02.2010 10:01

Ответ: Lib_proweb - полноценная работа с http! Рабочий POST!!!
 
аха GET, POST. гет я поставил для примера, а так мне нужно будет передавать много русского текста и будет POST. но он тоже не работает...

а какой функцией кодировать?

cherepets 08.02.2010 22:05

Ответ: Lib_proweb - полноценная работа с http! Рабочий POST!!!
 
вроде кто-то писал какие-то библиотеки, но лично я советую просто посмотреть как это делает браузер и сделать самому также)) (% рисовать)

Demon_12 09.02.2010 02:25

Ответ: Lib_proweb - полноценная работа с http! Рабочий POST!!!
 
Я вот посмотрел как делает браузер. Все поля повторил. возвращает код 411 Length Request.
Но я же явно выставляю
web.set_property('Content-Length','90');


Часовой пояс GMT +4, время: 23:20.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot