2010-03-08 10 views
1

J'utilise le composant ICS HttpCli pour POSTER une requête. J'utilise un exemple fourni avec le composant. Il dit:Delphi: problème avec la méthode de publication 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; 

Mais ce fait, il envoie pas

status = no

mais

s.t.a.t.u

I c ne comprends pas, où est le problème. Peut-être quelqu'un peut montrer un exemple, comment envoyer une requête POST avec l'aide du composant HttpCli?

PS Je ne peux pas utiliser Indy =)

Répondre

6

Je suppose que vous utilisez Delphi 2009 ou plus tard, où le type string détient deux octets par caractère des données Unicode. La fonction Length donne le nombre de caractères, pas le nombre de octets, donc lorsque vous mettez votre chaîne dans le flux de mémoire, vous copiez seulement moitié les octets de la chaîne. Même si vous les aviez tous copiés, vous auriez quand même un tas de données supplémentaires dans le flux, car chaque caractère a deux octets et le serveur s'attend probablement à en recevoir un seul. Utilisez un type de chaîne différent, tel que AnsiString ou UTF8String.