views:

250

answers:

2

Hello

I am using HttpCli component form ICS to POST a request. I use an example that comes with the component. It says:

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;

But it fact, it sends not

status=no

but

s.t.a.t.u

I can't understand, where is the problem. Maybe someone can show an example, how to send POST request with the help of HttpCli component?

PS I can't use Indy =)

+5  A: 

I suppose you're using Delphi 2009 or later, where the string type holds two-byte-per-character Unicode data. The Length function gives the number of characters, not the number of bytes, so when you put your string into the memory stream, you only copy half the bytes from the string. Even if you'd copied all of them, though, you'd still have a bunch of extra data in the stream since each character has two bytes and the server probably only expects to get one.

Use a different string type, such as AnsiString or UTF8String.

Rob Kennedy
A: 

Education site

qw