purebasic.info

PureBasic forum
Текущее время: Пн июл 16, 2018 6:11 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
СообщениеДобавлено: Сб июн 14, 2014 8:08 pm 
Не в сети
док

Зарегистрирован: Сб май 28, 2011 6:55 pm
Сообщений: 137
Благодарил (а): 7 раз.
Поблагодарили: 0 раз.
Функция URLEncoder в pb не корректно работает и не все символы кодирует, именно поэтому в некоторых случаях её не хватает.
Попробовал решить этот вопрос вот таким образом:

Код:
1
2
3
4
5
6
7
8
9
10
 
Procedure.s encodeurl_(s.s)
  f=Len(s.s)
For i=1 To f
  sh.s=Mid(s.s,i,1)
  en.s=en+"%"+Hex(Asc(sh))
Next
  ProcedureReturn en.s
EndProcedure
 



Но такой метод не годится если строка большая, то есть больше 10000-20000 символов, в этом случае почему то не все символы кодирует, может кто подскажет как можно иначе решить проблему что бы с большим количеством символов не было проблем.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс июн 15, 2014 8:53 am 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
URL кодирование применяется для передачи параметров скрипту методом GET (в URL). Зачем вам кодировать строку такой длины, если в URL вы не сможете запихнуть строку такой длины? Другого применения я не вижу

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс июн 15, 2014 1:43 pm 
Не в сети
док

Зарегистрирован: Сб май 28, 2011 6:55 pm
Сообщений: 137
Благодарил (а): 7 раз.
Поблагодарили: 0 раз.
Метод post.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс июн 15, 2014 1:48 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2277
Откуда: Russia — Belarus
Благодарил (а): 5 раз.
Поблагодарили: 72 раз.
Пункты репутации: 11
Aleksandr писал(а):
в этом случае почему то не все символы кодирует, может кто подскажет как можно иначе решить проблему что бы с большим количеством символов не было проблем.

Разделять строку и скармливать процедуре по частям?

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс июн 15, 2014 4:30 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 880
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
Точно знаю, что длинна гет данных не должна превышать 300-1000 символов, зависит от настроения :D сервера.

Цитата:
Метод post.

А тут вообще зачем кодировать?

Ты хочеш методом ПОСТ, отправлять гет данные?, в смысле в теле запроса в параметре
POST /тут твоё чудо ноу хау HTTP 1.0
Так чтоли?

Или в конце запроса с указанием Len: string len
Но тогда зачем кодировать?

В общем процедура у тебя нормальная для кодирования гет данных, а в посте ото не нужно, если уж очень прижмет то используй Base64 с указанием в заголовке запроса, что данные кодированы.

_____________________________

Да и ещё, на стороне сервера иногда происходит проверка, как отправленны данные, в пхп есть две глобальные переменные, массива, один вобрал в себя все гет, а другой все пост переменные.
У пхпшников уточнять надо, я лет 5ть на нём не писал
Я к тому, что не всегда можно пост данные отправить методом гет и это будет работать.

_________________
Детям нельзя в интернет. От детей интернет тупеет.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс июн 15, 2014 6:05 pm 
Не в сети
док

Зарегистрирован: Сб май 28, 2011 6:55 pm
Сообщений: 137
Благодарил (а): 7 раз.
Поблагодарили: 0 раз.
post с len string, viewtopic.php?f=7&t=3863
методом пост мы как раз и отправляем текстовые данные серверу, кодировать обязательно, иначе не пашет, бился три или четыре дня, в итоге всё оказалось проще не куда, а именно потребовалось закодировать все отсылаемые данные ( и то со своими хитростями), я конечно не особый программер и много в чём могу здесь ошибаться, но у меня заработало именно после этих плясок и не иначе.
Количество символов в post запрос (в конкретном случае) доходит до 50000, а то и больше.
Пробовал отсылать большие исходники на php, полёт нормальный, без ошибок и обрывов.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс июн 15, 2014 6:10 pm 
Не в сети
док

Зарегистрирован: Сб май 28, 2011 6:55 pm
Сообщений: 137
Благодарил (а): 7 раз.
Поблагодарили: 0 раз.
Да и есть такие случаи когда без post не обойтись, даже в случае с авторизацией или с посылкой файлов.
Форум висит, он как тренировочная площадка, в основном использую его для теста скриптов, ну вот ещё софтинку на пурике нарисовал, теперь будет грабить посты\сорцы с различных ресурсов и постить на форуме, в принципе для этой софтинки и повесил форум, так что если нужно, пользуйтесь, мне не жалко.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс июн 15, 2014 6:26 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 880
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
Aleksandr писал(а):
post с len string, viewtopic.php?f=7&t=3863
методом пост мы как раз и отправляем текстовые данные серверу, кодировать обязательно, иначе не пашет, бился три или четыре дня, в итоге всё оказалось проще не куда, а именно потребовалось закодировать все отсылаемые данные ( и то со своими хитростями), я конечно не особый программер и много в чём могу здесь ошибаться, но у меня заработало именно после этих плясок и не иначе.
Количество символов в post запрос (в конкретном случае) доходит до 50000, а то и больше.
Пробовал отсылать большие исходники на php, полёт нормальный, без ошибок и обрывов.


В той теме у тебя в концах строк, при составлении запросов, висит #LF$, попробуй #CRLF$

Убери из запроса строку
tx$=tx$+"Accept-Encoding: gzip, deflate"+ #LF$
Если конечно специально не ищщеш приключений с разархивацией ответа от сервера
Да и ещё, в этом и может скрываться твоя проблемма.
Ты говориш серверу, что данные заархивированны по алгоритму gzip, а сам отправляеш голый текст.
Ещё, если эту строку не убрать, то ты можеш в ответ от сервера получить заархивированный HTML и тебе придётся его распоковывать. Если у тебя инет безлимитный, скорость нормальная и нет фобии по поводу трафика и скорости передачи приёма, то убери это, пока новые проблеммы не возникли.

_________________
Детям нельзя в интернет. От детей интернет тупеет.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс июн 15, 2014 6:33 pm 
Не в сети
док

Зарегистрирован: Сб май 28, 2011 6:55 pm
Сообщений: 137
Благодарил (а): 7 раз.
Поблагодарили: 0 раз.
тот код в корне изменился, вот если бы ты раньше сказал про эту строку, то я бы сэкономил как минимум пару часов приключений в стиле метод тыка.
А вот с gzip всё таки пришлось распрощаться, хотя и штука нужная в моём случае, но пока не дошло(лень разбираться) как прикрутить zlib, позже думаю прикручу.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс июн 15, 2014 7:23 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 880
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
Aleksandr писал(а):
вот если бы ты раньше сказал про эту строку, то я бы сэкономил как минимум пару часов приключений в стиле метод тыка.


Пару часов, это не предел
И на Я бывает, и на ё бывает, в общем всякое бывает, главное, что проблемма решена и кодировать нечего не надо :D

_________________
Детям нельзя в интернет. От детей интернет тупеет.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс июн 15, 2014 7:58 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11204
Благодарил (а): 4 раз.
Поблагодарили: 421 раз.
Распаковка GZIP.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
  #Z_OK = 0
  #Z_STREAM_END    =  1
  #Z_NEED_DICT     =  2
  #Z_ERRNO         = -1
  #Z_STREAM_ERROR  = -2
  #Z_DATA_ERROR    = -3
  #Z_MEM_ERROR     = -4
  #Z_BUF_ERROR     = -5
  #Z_VERSION_ERROR = -6
 
  #Z_NO_FLUSH      =  0
  #Z_PARTIAL_FLUSH =  1
  #Z_SYNC_FLUSH    =  2
  #Z_FULL_FLUSH    =  3
  #Z_FINISH        =  4
  #Z_BLOCK         =  5
 
CompilerIf #PB_Compiler_Processor = #PB_Processor_x64 And #PB_Compiler_OS <> #PB_OS_Windows
 
  ; On Linux x64, a long is 8 byte (unlike Windows x64)
  ;
  Structure zstream
    *next_in.BYTE
    avail_in.l
    pad.l
    total_in.i ; uLong
   
    *next_out.BYTE
    avail_out.l
    pad2.l
    total_out.i ; uLong
   
    *msg.BYTE
    *state
   
    zalloc.i
    zfree.i
    opaque.i
   
    data_type.l
    pad3.l
    adler.i    ; uLong
    reserved.i ; uLong
  EndStructure
 
CompilerElse
 
  Structure zstream
    *next_in.BYTE
    avail_in.l
    total_in.l ; uLong
   
    *next_out.BYTE
    avail_out.l
    total_out.l ; uLong
   
    *msg.BYTE
    *state
   
    zalloc.i
    zfree.i
    opaque.i
   
    data_type.l
    adler.l    ; uLong
    reserved.l ; uLong
   
    ; without this, the inflateInit2() fails with a version error
    CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
      alignment.l
    CompilerEndIf
  EndStructure
 
CompilerEndIf
 
ImportC  "zlib.lib"
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
    inflateInit2(*strm, WindowBits.i, v, ss) As "_inflateInit2_@16"
    inflate(*strm, flush.i) As "_inflate@8"
    inflateEnd(*strm) As "_inflateEnd@4"
  CompilerElse
    inflateInit2(*strm, WindowBits.i, v, ss) As "inflateInit2_"
    inflate(*strm, flush.i) As "inflate"
    inflateEnd(*strm) As "inflateEnd"
  CompilerEndIf
EndImport
 
Procedure G_ZIP_UnPack(*source, sourceLen, *dest, *destLen) ; Распаковка данных, кодированных алгоритмом gzip.
  Protected g_zip.zstream, Result
  Result = 0
 
  If *source And sourceLen>0 And *dest And *destLen
    g_zip\next_in   = *source
    g_zip\avail_in  = sourceLen
    g_zip\next_out  = *dest
    g_zip\avail_out = *destLen
    g_zip\zalloc    = #Null
    g_zip\zfree     = #Null
    g_zip\opaque    = #Null
    g_zip\data_type = 1
   
    If inflateInit2(@g_zip,15+32,?G_ZIP_UnPack_V,SizeOf(g_zip)) = #Z_OK
      If inflate(@g_zip, #Z_FINISH) = #Z_STREAM_END
        If g_zip\total_out>0 And PeekI(*destLen)>=g_zip\total_out
          Result = g_zip\total_out ; Сколько байт в буфере.  
        EndIf
      EndIf
      inflateEnd(@g_zip)
    EndIf
  EndIf
 
  ProcedureReturn Result
 
  DataSection
    G_ZIP_UnPack_V: ;@"1.2.3"
    Data.a $31, $2E, $32, $2E, $33, 0, 0, 0, 0
  EndDataSection
 
EndProcedure


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн янв 16, 2017 3:45 am 
Не в сети
док
Аватар пользователя

Зарегистрирован: Сб мар 28, 2015 11:06 pm
Сообщений: 139
Откуда: Україна
Благодарил (а): 7 раз.
Поблагодарили: 10 раз.
Пункты репутации: 4
Неожиданно попёрло...

ChangeLog file for zlib
Changes in 1.2.11 (15 Jan 2017)
- Fix deflate stored bug when pulling last block from window
- Permit immediate deflateParams changes before any deflate input

Changes in 1.2.10 (2 Jan 2017)
- Avoid warnings on snprintf() return value
- Fix bug in deflate_stored() for zero-length input
- Fix bug in gzwrite.c that produced corrupt gzip files
- Remove files to be installed before copying them in Makefile.in
- Add warnings when compiling with assembler code

Changes in 1.2.9 (31 Dec 2016)
- Fix contrib/minizip to permit unzipping with desktop API [Zouzou]
- Improve contrib/blast to return unused bytes
- Assure that gzoffset() is correct when appending
- Improve compress() and uncompress() to support large lengths
- Fix bug in test/example.c where error code not saved
- Remedy Coverity warning [Randers-Pehrson]
- Improve speed of gzprintf() in transparent mode
- Fix inflateInit2() bug when windowBits is 16 or 32
- Change DEBUG macro to ZLIB_DEBUG
- Avoid uninitialized access by gzclose_w()
- Allow building zlib outside of the source directory
- Fix bug that accepted invalid zlib header when windowBits is zero
- Fix gzseek() problem on MinGW due to buggy _lseeki64 there
- Loop on write() calls in gzwrite.c in case of non-blocking I/O
- Add --warn (-w) option to ./configure for more compiler warnings
- Reject a window size of 256 bytes if not using the zlib wrapper
- Fix bug when level 0 used with Z_HUFFMAN or Z_RLE
- Add --debug (-d) option to ./configure to define ZLIB_DEBUG
- Fix bugs in creating a very large gzip header
- Add uncompress2() function, which returns the input size used
- Assure that deflateParams() will not switch functions mid-block
- Dramatically speed up deflation for level 0 (storing)
- Add gzfread(), duplicating the interface of fread()
- Add gzfwrite(), duplicating the interface of fwrite()
- Add deflateGetDictionary() function
- Use snprintf() for later versions of Microsoft C
- Fix *Init macros to use z_ prefix when requested
- Replace as400 with os400 for OS/400 support [Monnerat]
- Add crc32_z() and adler32_z() functions with size_t lengths
- Update Visual Studio project files [AraHaan]


может кто нить собрать dll\lib а то официальных пока нет


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Bing [Bot] и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB