Json HTTP/1.1 400错误请求Delphi VCL XE6

Json HTTP/1.1 400错误请求Delphi VCL XE6,json,delphi,vcl,Json,Delphi,Vcl,我必须通过post发送到JSON文本的URL字符串,我使用TidHTTP组件通过post发送,如下面的代码所示,但是当我点击submit按钮时,我跳过了这个错误,我一直在搜索google向另一个人报告这种情况,但没有任何解决方案对我有帮助 var postData:String; url:String; contestacion:String; datosPOst:TStringList; lista:TMemoryStream; begin datosPOst:=TStringList.Cre

我必须通过post发送到JSON文本的URL字符串,我使用TidHTTP组件通过post发送,如下面的代码所示,但是当我点击submit按钮时,我跳过了这个错误,我一直在搜索google向另一个人报告这种情况,但没有任何解决方案对我有帮助

var
postData:String;
url:String;
contestacion:String;
datosPOst:TStringList;
lista:TMemoryStream;
begin
datosPOst:=TStringList.Create;
datosPOst.Text:='{'+#10+'"ticketCode": "asdasd",'+#10+
'"CIF": "***",'+#10+
'"storeCode": "***",'+#10+
'"saleTimeStamp": "\/Date(123456000000)\/",'+#10+
'"email": "prueba@***",'+#10+
'"userCP": "30280",'+#10+
'"products": ['+#10+
'{'+#10+
'"Amount": 1,'+#10+
'"Description": "PRUEBA ticket",'+#10+
'"Name": "Prueba ticket 2",'+#10+
'"Price": 25.25,'+#10+
'"ProductCode": "50",'+#10+
'"Tax": 21,'+#10+
'"UnitPrice": 250.00'+#10+
'}'+#10+
'],'+#10+
'"user": "****",'+#10+
'"password": "****"'+#10+
'}';
lista:=TMemoryStream.Create;
datosPOst.SaveToStream(lista);
contestacion:=conexion.Post('http://****.com/Ticket.svc/rest/InsertTicket',lista);
另外,如果有任何方法可以从delphi中生成json,也将不胜感激


谢谢

错误400是您在JSON中出现错误时得到的回复

我建议您使用另一个组件来发送POST请求,该组件确实会返回正文,因为这正是您所需要的


有idHTTP的替代方案。

现在我有了解决方案:

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

并且正在工作

@如果它不是重复的,那么您链接的问题是如何将它放入需要流的字符串列表中。这是关于400个错误的请求,在这种情况下,idHTTP不会返回所需的正文。用户后面缺少一个逗号,应该是“user:***,”,“+10+问题不在于Comma您可以使用开源库从Delphi创建JSON。您可以从EIdHTTPProtocolException.ErrorMessage属性获取响应文本。我不建议使用不同的库。你得到的是错误响应,而不是身体,这是两个不同的东西。我得到了错误响应:[无法解码任何JSON对象],但它没有显示实际有用的信息:{user:[无效用户]}@PieterB您可以包含完整的HTTP响应来说明响应中的两个不同内容吗?我可以确认EIdHTTPProtocolException.ErrorMessage确实包含HTTP响应的主体。HTTP回复文本错误请求位于EIdHTTPProtocolException.Message中。