0

我需要通过链接“ 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":"无效的用户登录名或密码"}

所以这个响应是我正在等待的,但只得到异常和线程停止。请指点!德尔福 XE3。

4

1 回答 1

3

这对印地来说很正常。它会为不成功的响应(如 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 响应并自动重新发送带有密码的请求。

于 2014-02-24T13:57:11.870 回答