![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка в TIdHTTPServer
Добежал © (2008-12-09 11:30:00)Странный глюк в TIdHTTPServer, если в запросе есть и GET, и POST-данные. Картинка:
http://pic.ipicture.ru/uploads/081209/954A2LW4CN.jpg
В нераспарсенных параметрах видно, что идут POST-данные, потом перевод строки и идут GET-данные.
Соответственно, в распарсенных параметрахARequestInfo.Paramsпоследний параметр выявляется неправильно, к последнему POST-данному прибавляются GET-данные. А если GET-параметров несколько - то в результате получается увеличение количества параметров.
Пример:
- имеем POST-данные такие: action=send&id=1
- имеем GET-данные: /?page=4
В результате, вARequestInfo.Paramsокажется 2 записи:
1) action=send
2) id=1#13#10page=4
Что, естественно, неверно. Последнее POST-данное слилось с GET-данными. И так происходит всегда.
Вопрос - кто сталкивался с таким глюком, как лечить? Используется Indy от D7. Обновлять сам Indy не очень хочется, подозреваю в дальнейшем кто-то может откомпилить на опять дефолтном дельфи - и встретит такие грабли, что потом запаришься разбираться.
Судя по всему, просто буду вручную парсить POST-параметры. Но хочу точный алгоритм:
1) нужно выделить строку от первого символа (или предыдущего параметра) до знака амперсанда "&" (или конца строки)
2) в этой строке должен быть символ равно "=". До него стоит название параметра, после него стоит значение параметра.
3) над названием параметра и значением параметра нужно провести преобразование по некоему алгоритму, чтобы превратить в win-1251 символы.
Где в indy этот алгоритм преобразования? По-моему, где-то должен быть... Чтобы все было НАИБОЛЕЕ корректно или готовую функцию трансляции параметров...
Я ничего не забыл?
Или возможны другие варианты решения проблемы?
Добежал (2008-12-10 11:49:00) [1]а, сделал распарсивание параметров просто вручную...
Cobalt (2008-12-09 18:08:00) [2]Патч к "Indy от D7"?
А чтобы не откомпилили на "дефолтном" - вставь какой-нить define в патче, а в своём модуле проверяй.
Cobalt (2008-12-09 18:08:00) [3]Сделай патч к "Indy от D7"?
А чтобы не откомпилили на "дефолтном" - вставь какой-нить define в патче, а в своём модуле проверяй.
Добежал (2008-12-09 15:45:00) [4]up? (