我在我的安卓应用程序中通过代理使用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错误的情况下应用这个解决方案(而不是每次都捕获异常)。
任何想法都将受到感谢。谢谢。
发布于 2020-06-05 14:22:10
尽管这个问题很古老,但我没有找到一个具体的答案,所以仅供参考:
根据我对Java8的观察,示例中的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);发布于 2014-08-30 03:55:20
请尝试捕获HttpResponseException,并检查它的状态代码(.getStatusCode()),看看它是否为407 (或者更好的是,使用HttpURLConnection.HTTP_PROXY_AUTH,更具可读性)。
HttpResponseException是IOException的子类,我认为这就是抛出的实际异常。
(有关详细信息,请访问http://developer.android.com/reference/org/apache/http/client/HttpResponseException.html。)
https://stackoverflow.com/questions/18900143
复制相似问题