Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TIdHttp POST只返回需要json的XML_Json_Delphi_Delphi 2007_Indy10 - Fatal编程技术网

TIdHttp POST只返回需要json的XML

TIdHttp POST只返回需要json的XML,json,delphi,delphi-2007,indy10,Json,Delphi,Delphi 2007,Indy10,在我的Delphi2007代码中,我将发布到一个安全的web服务以获取身份验证令牌。对于邮递员或用.net语言发出的请求,一切都很顺利。 但我需要使用Delphi2007访问此WS。。。然后我做了这个代码: var IdHTTP1 : TIdHTTP; LHandler: TIdSSLIOHandlerSocketOpenSSL; jsonSend : TStringStream; SourceString, RetString : String; begin Source

在我的Delphi2007代码中,我将发布到一个安全的web服务以获取身份验证令牌。对于邮递员或用.net语言发出的请求,一切都很顺利。 但我需要使用Delphi2007访问此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-response)是XML格式的,而不是预期的jSon格式。 我希望有人能帮我,我真的不想解析XML。。。
谢谢你的帮助

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

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


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

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

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


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

多亏了Remy Lebeau的建议,我研究了Delphi提出的请求,发现在标题中有一个键指定XML为可接受的响应

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

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

现在,我的Web服务响应如期。

多亏了Remy Lebeau的建议,我研究了Delphi提出的请求,发现在标题中有一个键指定XML为可接受的响应

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

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

现在,我的Web服务响应如期。

感谢您的快速响应!我已经强制我的WS只使用JSON响应。。。但这看起来有点难看。我会试试你的建议。谢谢你的快速回复!我已经强制我的WS只使用JSON响应。。。但这看起来有点难看。我将试试你的建议。