Indy10 idhttp返回JSON设置

https://stackoverflow.com/questions/24025646/delphi-http-post-json

HTTP1.Request.ContentEncoding should be HTTP1.Request.CharSet instead. UTF-8 is a charset encoding, not a content encoding. And then make sure your JSON data is actually encoded to UTF-8 before posting it. If you are using ASCII characters, the TStringStream code you showed is fine. But if you are using non-ASCII Characters, you need to encode them, such as with Utf8Encode()TIdHTTP does not encode TStream data, it is sent as-is.

Procedure Tformmaintestbed.btnJSONSendClick(Sender: TObject);

var

Json: string;

sResponse: string;

JsonToSend: TStringStream;

begin

Json := '{"auth": {"applicationId": "' + edApplication.text +

'","applicationPassword": "' + edpassword.text +

'","accountId": "' + edaccount.text +

'","userId": "' + edUser.text +

'"}}';

 

memoRequest.Text := Json;

 

JsonToSend := TStringStream.Create(Utf8Encode(Json)); // D2007 and earlier only

//in D2009 and later, use this instead:

//JsonToSend := TStringStream.Create(Json, TEncoding.UTF8);

try

HTTP1.Request.ContentType := 'application/json';

HTTP1.Request.CharSet := 'utf-8';

 

try

sResponse := HTTP1.Post(cbAddress.Text, JsonToSend);

except

on E: Exception do

ShowMessage('Error on request: '#13#10 + e.Message);

end;

finally

JsonToSend.Free;

end;

 

memoResponse.Text := sResponse;

end;

Alternatively:

Procedure Tformmaintestbed.btnJSONSendClick(Sender: TObject);

var

Json: string;

sResponse: string;

JsonToSend: TMemoryStream;

begin

Json := '{"auth": {"applicationId": "' + edApplication.text +

'","applicationPassword": "' + edpassword.text +

'","accountId": "' + edaccount.text +

'","userId": "' + edUser.text +

'"}}';

 

memoRequest.Text := Json;

 

JsonToSend := TMemoryStream.Create;

try

WriteStringToStream(JsonToSend, Json, enUTF8);

JsonToSend.Position := 0;

 

HTTP1.Request.ContentType := 'application/json';

HTTP1.Request.CharSet := 'utf-8';

 

try

sResponse := HTTP1.Post(cbAddress.Text, JsonToSend);

except

on E: Exception do

ShowMessage('Error on request: '#13#10 + e.Message);

end;

finally

JsonToSend.Free;

end;

 

memoResponse.Text := sResponse;

end;

posted @ 2018-01-23 16:41  后凤凰  阅读(385)  评论(0编辑  收藏  举报