【问题标题】:TIdHttp POST returns only XML where json is expectedTIdHttp POST 仅返回预期 json 的 XML
【发布时间】:2014-05-15 15:21:02
【问题描述】:

在我的 Delphi 2007 代码中,我发布到安全的 Web 服务以获取身份验证令牌。一切都适用于 Postman 或以 .net 语言提出的请求。 但是我需要使用 Delphi 2007 访问这个 WS...然后我编写了这段代码:

var
  IdHTTP1 : TIdHTTP;
  LHandler: TIdSSLIOHandlerSocketOpenSSL;
  jsonSend : TStringStream;
  SourceString, RetString : String;

begin
  SourceString := '{"MyJsonStuff": "blabla"'}';
  try
    IdHTTP1:=TIdHTTP.Create(nil);
    //IdHTTP1.Request.Charset := 'utf-8';
    //IdHTTP1.HandleRedirects := True;
    IdHTTP1.Request.ContentType := 'application/json';
    try
      LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
      LHandler.SSLOptions.Method := sslvSSLv23;
      try
        IdHTTP1.IOHandler:=LHandler;
        jsonSend := TStringStream.Create(SourceString);
        RetString := IdHTTP1.Post('myUrl', jsonSend));
        jsonSend.free;
      except

      end;
        LHandler.Free;
    finally
      IdHTTP1.Free;
    end;
  except 
  end;
end;

此代码运行良好,但 RetString(WS 响应)是 XML 格式,而不是预期的 jSon。 我希望有人可以帮助我,我真的不想解析 XML ...... 谢谢你的帮助!

【问题讨论】:

    标签: json delphi delphi-2007 indy10


    【解决方案1】:

    感谢 Remy Lebeau 的建议,我探索了 Delphi 提出的请求,发现在 Headers 中有一个键将 XML 指定为接受的响应...

    我只是简单地覆盖了这个键并添加了这行代码:

    IdHTTP1.Request.Accept := '*/*';
    

    现在我的网络服务按预期响应。

    【讨论】:

      【解决方案2】:

      这完全取决于您发布到的 URL。仅仅因为您以 JSON 格式发送请求并不一定意味着您将获得 JSON 格式的回复,除非 Web 服务被编码为始终返回 JSON,或者 Web 服务允许您使用查询字符串参数指定所需的回复格式URL 本身,或在请求的 Accept 标头中,或在 post 数据中的参数。

      Web 服务也可能对 UserAgent 敏感,向不同类型的客户端发送不同的内容/格式。许多对 UserAgent 敏感的网站无法识别/接受默认的 TIdHTTP.Request.UserAgent 值,因此您可能需要更改它以模仿其他客户端,例如 Internet Explorer、Firefox 或 Safari。

      使用像 Wireshark 这样的数据包嗅探器或像 Fiddler 这样的 HTTP 代理/调试器来分析 Postman 和 DotNet 发送的 HTTP 请求,然后根据需要使用 TIdHTTP 复制这些请求。

      【讨论】:

      • 感谢您的快速回复!我已经强制我的 WS 只使用 JSON 响应......但这似乎有点难看。我会试试你的建议。
      猜你喜欢
      • 1970-01-01
      • 2012-08-23
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多