我在Android应用程序中通过需要身份验证的代理使用HttpURLConnection
。这是我的代码,问题解决后,我将向您解释。
HttpURLConnection connection = null;
int responseCode = -1;
try {
connection = (HttpURLConnection) myUrl.openConnection();
connection.setInstanceFollowRedirects(false);
connection.setConnectTimeout(DEFAULT_TIMEOUT);
connection.setReadTimeout(DEFAULT_TIMEOUT);
responseCode = connection.getResponseCode();
System.out.println("ResponseCode = " + responseCode);
} catch (IOException e) {
System.out.println("Exception : " + e.getMessage());
}
我的问题是,我在getResponseCode()方法上遇到异常,该异常具有以下消息:
Failed to authenticate with proxy
。通常,此特定错误的http错误代码是407。但是在这里,我得到了一个异常,但没有响应代码,值为407。
我有应用登录名和密码连接到代理的解决方案,但是我只想在出现407错误(而不是每次遇到异常时)的情况下应用此解决方案。
任何想法将不胜感激。
谢谢。
最佳答案
即使问题很老,我也没有找到具体答案,仅供参考:
根据我对Java 8的观察,示例中的getResponseCode
是实际请求服务器的第一种方法,这就是为什么在此行上获得IOException
的原因。
在幕后getInputStream
是实际建立连接的触发器,但是我不建议直接使用它(因为实现可能会改变)。不幸的是,调用connections.connect()
不能按预期方式工作,并且不会引发任何异常。
最后,在引发异常之后,connection.getResponseCode()
也可以工作,即使发生异常,这也将是获取响应代码的关键:
HttpURLConnection connection = null;
int responseCode = -1;
try {
connection = (HttpURLConnection) myUrl.openConnection();
connection.setInstanceFollowRedirects(false);
connection.setConnectTimeout(DEFAULT_TIMEOUT);
connection.setReadTimeout(DEFAULT_TIMEOUT);
responseCode = connection.getResponseCode();
} catch (IOException e) {
responseCode = connection.getResponseCode();
}
System.out.println("ResponseCode = " + responseCode);