json - TIdHttp POST仅返回期望使用json的XML

标签 json delphi delphi-2007 indy10

在我的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 ...
谢谢你的帮助!

最佳答案

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

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

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

关于json - TIdHttp POST仅返回期望使用json的XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23682452/

相关文章:

delphi - 如何探测英特尔® 高级矢量扩展的可用性?

java - jackson 不穿 Jersey 工作

json - 如何读取服务状态并通过 bash 中的 JSON 将其传递到 Slack

ios - Alamofire.requestObject 自定义案例未调用

Windows 7 中的 Delphi VCL "TaskDialog"问题

sql - 如何使用 Delphi 2007 从 firebird 中的时间戳字段获取毫秒值

json - 高效灵活的 Javascript 库来查询允许聚合的大型 JSON 文件?

delphi - 在 Delphi 中实现变更日志(步骤 2)

delphi - 如何在 TImage 中平铺图像?

ios - 带有 Firemonkey 的 iAd?