【问题标题】:HTTP/1.1 400 Bad Request Delphi VCL XE6HTTP/1.1 400 错误请求 Delphi VCL XE6
【发布时间】:2014-10-03 08:35:08
【问题描述】:

我必须通过邮寄方式发送到 JSON 文本的 URL 字符串,我使用 TidHTTP 组件通过邮寄方式发送,如下面的代码所示,但是当我点击提交按钮时,我跳过了这个错误,我一直在搜索谷歌到另一个人,这种情况发生了,但在这种情况下,没有一个解决方案对我有帮助。

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 也将不胜感激

谢谢

【问题讨论】:

  • @whosrdaddy 它不是重复的,您链接的问题是将它放在需要流的字符串列表中。这是关于 400 bad-request 以及在这种情况下 idHTTP 不会给您返回所需的正文的事实。
  • 用户后面少了一个逗号,应该是'"user": "****",'+#10+
  • 问题不是逗号
  • 您可以使用 SuperObject 开源库从 Delphi 创建 JSON。

标签: json delphi vcl


【解决方案1】:

现在我有了解决方案:

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

并且正在工作

【讨论】:

    【解决方案2】:

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

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

    Synapse 可以替代 idHTTP。

    【讨论】:

    • 您可以从EIdHTTPProtocolException.ErrorMessage 属性获得的响应文本。我不建议使用其他库。
    • 您得到的是错误响应,而不是正文,这是两件不同的事情。我得到错误响应:[无法解码 JSON 对象],但它没有显示实际有用的信息:{“user”:[“Invalid user”]}
    • @PieterB 您能否包含完整的 HTTP 响应以说明响应中两个不同的内容的位置?
    • 我可以确认EIdHTTPProtocolException.ErrorMessage 确实包含HTTP 响应的body。 HTTP 回复文本 (Bad Request) 位于 EIdHTTPProtocolException.Message
    猜你喜欢
    • 2017-07-21
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 2021-07-23
    相关资源
    最近更新 更多