TIdHttp POST只返回需要json的XML
在我的Delphi2007代码中,我将发布到一个安全的web服务以获取身份验证令牌。对于邮递员或用.net语言发出的请求,一切都很顺利。 但我需要使用Delphi2007访问此WS。。。然后我做了这个代码: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
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响应。。。但这看起来有点难看。我将试试你的建议。