gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 19:15:45 28 4
gpt4 key购买 nike

在我的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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com