7

有人让 JSON 与 TIdHttp 一起工作吗?

PHP总是返回NULL $_POST,我做错了什么吗?

德尔福源码:

http := TIdHttp.Create(nil);
http.HandleRedirects := True;
http.ReadTimeout := 5000;
http.Request.ContentType := 'application/json';
jsonToSend := TStringStream.Create('{"name":"Peter Pan"}');
jsonToSend.Position := 0;
Memo1.Lines.Text := http.Post('http://www.website.com/test.php', jsonToSend);
jsonToSend.free;
http.free;

PHP源码:

<?php
$value = json_decode($_POST);
var_dump($value);
?>
4

2 回答 2

9

您不能使用 aTStringList来发布 JSON 数据。 将以破坏 JSON 数据的方式TIdHTTP.Post()对内容进行编码。TStringList您需要将 JSON 数据放入 aTStream中。TIdHTTP.Post()将按原样传输其内容。另外,不要忘记设置TIdHTTP.Request.ContentType属性,以便服务器知道您正在发布 JSON 数据。

于 2012-08-30T15:20:02.627 回答
3

你需要定义一个 post 变量,试试这个代码(我在你的代码中添加了“json”var):

德尔福代码:

http := TIdHttp.Create(nil);
http.HandleRedirects := true;
http.ReadTimeout := 5000;
jsonToSend := TStringList.create;
jsonToSend.Text := 'json={"name":"Peter Pan"}';
Memo1.Lines.Text := http.Post('http://www.website.com/test.php', jsonToSend);
jsonToSend.free;
http.free;

PHP源码:

<?php
$value = json_decode($_POST['json']);
var_dump($value);
?>
于 2012-08-29T11:51:22.633 回答