Delphi: проблема с методом записи httpcli (ICS) - PullRequest
1 голос
/ 08 марта 2010

Я использую компонент HttpCli из ICS для отправки запроса. Я использую пример, который поставляется с компонентом. Это говорит:

procedure TForm4.Button2Click(Sender: TObject);
var
    Data : String;
begin
    Data:='status=no';
    HttpCli1.SendStream := TMemoryStream.Create;
    HttpCli1.SendStream.Write(Data[1], Length(Data));
    HttpCli1.SendStream.Seek(0, 0);
    HttpCli1.RcvdStream := TMemoryStream.Create;
    HttpCli1.URL := Trim('http://server/something');
    HttpCli1.PostAsync;
end;

Но это факт, он посылает не

нет

состояние = нет

но

s.t.a.t.u

Я не могу понять, в чем проблема. Может быть, кто-то может показать пример, как отправить POST-запрос с помощью компонента HttpCli?

PS Я не могу использовать Инди =)

1 Ответ

6 голосов
/ 08 марта 2010

Полагаю, вы используете Delphi 2009 или более позднюю версию, где тип string содержит двухбайтовые символы Unicode. Функция Length дает количество символов , а не число байтов , поэтому, когда вы помещаете вашу строку в поток памяти, вы копируете только half байты из строки. Даже если вы скопируете их все, у вас все равно будет куча дополнительных данных в потоке, поскольку у каждого символа есть два байта, а сервер, вероятно, ожидает получить только один.

Используйте другой тип строки, например AnsiString или UTF8String.

...