powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Кодировка текста при запросе
18 сообщений из 18, страница 1 из 1
Кодировка текста при запросе
    #40050803
STestS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Отправляю POST запрос а в результате получаю значение немного не то...
Должно получиться "()" а получается "%28%29"

Подозреваю проблема в кодировке, подскажите как можно исправить..


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
procedure TForm2.Button3Click(Sender: TObject);
var
  LoginInfo: TStringList;
  Response: TStringStream;
begin
  Memo1.Clear;
  try
    LoginInfo := TStringList.Create;
    Response := TStringStream.Create('');
    LoginInfo.Add('Data()');
    IdHTTP1.Request.ContentType := 'text/plain';
    IdHTTP1.POST('http://192.168.100.100:5555/command',LoginInfo, Response);
    Memo1.Lines.Add(Response.DataString);
  finally
    begin
      Response.Free;
      LoginInfo.Free;
    end;
  end;
end;



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
POST /command HTTP/1.0
Connection: keep-alive
Content-Type: text/plain; charset=ISO-8859-1
Content-Length: 10
Host: 192.168.100.100:5555
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: identity
User-Agent: Mozilla/3.0 (compatible; Indy Library)

Data%28%29



...
Рейтинг: 0 / 0
Кодировка текста при запросе
    #40050806
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В инди где-то имеются функции по декодированию
...
Рейтинг: 0 / 0
Кодировка текста при запросе
    #40050828
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
STestS,

попробуй вместо
Код: pascal
1.
Response := TStringStream.Create('');

указать так:
Код: pascal
1.
Response := TStringStream.Create('', TEncoding.UTF8);
...
Рейтинг: 0 / 0
Кодировка текста при запросе
    #40050836
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
STestS,

Это строка, кодированная в URL-encoding. Деталей не знаю, но вроде тело POST запроса должно кодироваться только, если тип содержимого application/x-www-form-urlencoded. Почему-то у вас кодируется, хотя тип 'text/plain'. Чтобы раскодирвать назад, можно применить функцию TIdURI.URLDecode из модуля IdURI.
...
Рейтинг: 0 / 0
Кодировка текста при запросе
    #40050843
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62Почему-то у вас кодируется, хотя тип 'text/plain'.

Очевидно потому, что нубы, которые не в курсе необходимости соответствия тела HTTP потока
его заголовкам, сидят на обеих концах этого запроса.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Кодировка текста при запросе
    #40050844
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62,

вы говорите о разных вещах. Есть кодировка тела запроса, а есть кодировка URL запроса.
TIdURI.URLDecode работает с url, а для корректной отправки/получения тело запроса нужно отправлять в кодировке utf-8, для этого достаточно (речь о инди) создать стрим с utf8

И возвращаясь к исходной задаче, отправлять данные нужно с использованием tstingstream, а не tstringlist
...
Рейтинг: 0 / 0
Кодировка текста при запросе
    #40050850
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2,

посмотрите https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST
Если тип данных application/x-www-form-urlencoded, то данные в теле при передаче кодируются
application/x-www-form-urlencoded: the keys and values are encoded in key-value tuples separated by '&', with a '=' between the key and the value. Non-alphanumeric characters in both keys and values are percent encoded
И то, что ТС получает: Data%28%29 это как раз закодированные так данные.
...
Рейтинг: 0 / 0
Кодировка текста при запросе
    #40050852
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчёт особенностей Indy, это да, я помню, что тоже в каком-то проекте столкнулся с тем, что данные через версию функции, где параметр TStringList не доходили правильно, а где передается Stream, там доходило нормально.
...
Рейтинг: 0 / 0
Кодировка текста при запросе
    #40051284
STestS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока для себя не смог решить данную проблему... Думаю возможно поможет немножко больше вводной информации...
Вот информация о пакете с Wireshark
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Transmission Control Protocol, Src Port: 56039, Dst Port: 55400, Seq: 1, Ack: 1, Len: 122
Hypertext Transfer Protocol
    POST %2Fcommand HTTP/1.1\r\n
        [Expert Info (Chat/Sequence): POST %2Fcommand HTTP/1.1\r\n]
        Request Method: POST
        Request URI: %2Fcommand
        Request Version: HTTP/1.1
    Connection: Keep-Alive\r\n
    Content-Type: text/plain\r\n
    Content-Length: 10\r\n
        [Content length: 10]
    \r\n
    [HTTP request 1/131]
    [Response in frame: 66]
    [Next request in frame: 129]
    File Data: 10 bytes
Line-based text data: text/plain (1 lines)
    Data()



Не нашел ничего лучшего чем поднять сервер на компе с помощью программы "Hercules" (https://www.hw-group.com/software/hercules-setup-utility)
Сейчас думаю может то дело в данной программе...
...
Рейтинг: 0 / 0
Кодировка текста при запросе
    #40051288
STestS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробовал использовать программу cURL с параметрами:

Код: pascal
1.
curl.exe -d "Data()" http://192.168.100.100:5555/%2Fcommand



То результат без кодировки получился, сервер "Hercules"

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
Data()POST /%2Fcommand HTTP/1.1
Host: 192.168.100.100:5555
User-Agent: curl/7.75.0
Accept: */*
Content-Length: 6
Content-Type: application/x-www-form-urlencoded

Data()
...
Рейтинг: 0 / 0
Кодировка текста при запросе
    #40051293
STestS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В принципе удалось решить проблему с шифрованием путем установки параметра
Код: pascal
1.
[hoForceEncodeParams]:=false

Сейчас видно в нормальном виде
Код: pascal
1.
Data()

вместо
Код: pascal
1.
Data%28%29


Так же сменил "HTTP/1.0" на "HTTP/1.1" путем установки параметра
Код: pascal
1.
[hoKeepOrigProtocol]:=true


Но тут вылезла другая проблема... Хота запрос проходит...
Код: pascal
1.
Exception class EIdHTTPProtocolException with message 'POST /%2Fcommand HTTP/1.1'


...
Рейтинг: 0 / 0
Кодировка текста при запросе
    #40052043
STestS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У кого то есть предположения в чем может быть проблема? Сам найти не могу...
...
Рейтинг: 0 / 0
Кодировка текста при запросе
    #40052079
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
STestS,

тебе уже говорили, как решается твоя проблема)
...
Рейтинг: 0 / 0
Кодировка текста при запросе
    #40052199
STestS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
asutp2,

И как же? Из выше написанного ничего не помогло... Пробовал на D7 запустить тот же код но сообщение об ошибке то же...
...
Рейтинг: 0 / 0
Кодировка текста при запросе
    #40052203
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
STestS,

а куда вы посылаете запрос? На какой-то не свой сайт или своему же приложению?
...
Рейтинг: 0 / 0
Кодировка текста при запросе
    #40052223
STestS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
s62,

Тестирую я на программе "Hercules" а отправлять буду на другой компьютера, там я так понимаю поднят сервер. Каким образом он поднят там я не знаю... Пробовал использовать cURL для отправки запросов, с ним все работает
...
Рейтинг: 0 / 0
Кодировка текста при запросе
    #40052232
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
STestS,

вот это, что написал asutp2, не помогло?
Код: pascal
1.
И возвращаясь к исходной задаче, отправлять данные нужно с использованием tstingstream, а не tstringlist 


Можете, если у вас версия Delphi поновее, использовать не TIdHTTPClient из Indy, а TNetHTTPClient.
...
Рейтинг: 0 / 0
Кодировка текста при запросе
    #40052239
STestS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
s62
STestS,

вот это, что написал asutp2, не помогло?

StringSteam не помог, та же ошибка но запрос проходит..

s62
STestS,
Можете, если у вас версия Delphi поновее, использовать не TIdHTTPClient из Indy, а TNetHTTPClient.

У меня Embarcadero® Delphi XE6, такого компонента нету...
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Кодировка текста при запросе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]