我需要通过链接“https://mysite.sexy/sessionid?login=abc&password=abc”进行授权,并且我同时连接了 TidHttp 和 TIdSSLIOHandlerSocketOpenSSL。
我发送一个查询:
http.get("https://mysite.sexy/sessionid?login=abc&password=abc");
但几秒钟后我没有收到任何响应,而是收到此异常:“HTTP/1.1 401 Unauthorized。”
我通过网络搜索得到了这些解决方案:
http.Request.UserName := 'abc';
http.Request.Password := 'abc';
http.Request.UserAgent := 'Mozilla/5.0 (X11; U; Linux i686; cs-CZ; rv:1.7.12) Gecko/20050929';
但还是没有用。然而,通过 Chrome 浏览器来自网站的响应不会作为异常发生,只是检索错误代码和 JSON 格式的描述:
{"Code":4,"Desc":"Invalid user login or password"}
所以这个响应就是我在等待的,但只得到异常并且线程停止。 求指点! 德尔福XE3。
最佳答案
这对 Indy 来说很正常。它会为不成功的响应抛出异常,例如 401。如果您真的对响应文本感兴趣,您需要捕获异常并然后检查响应文本。 (通常情况下,您不需要,因为仅响应代码就可以告诉您所有您需要知道的信息。)当您遇到异常时,响应文本将位于异常的 ErrorMessage
属性中。
try
x := http.get("https://mysite.sexy/sessionid?login=abc&password=abc");
except
on E: EIdHTTPProtocolException do begin
if E.ErrorCode = 401 then
x := E.ErrorMessage
else
raise;
end;
end;
设置请求对象的授权属性显然没有帮助,因为您的服务器不使用标准 HTTP 身份验证。否则,Indy 会处理 401 响应并自动使用密码重新发送请求。
关于delphi - 如何通过 idHTTP 获取(即读取)https 响应。通常是 REST 授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21988015/