我正在尝试连接到代理服务器但不提供任何凭据,因此我可以抓住407并告诉用户他们需要提供信用。
我无法在生命中抓住这个错误。
private void doTunneling(HttpURLConnection conn) {
try {
doTunneling.invoke(conn);
} catch (ReflectiveOperationException x) {
throw new InternalError("Should not reach here", x);
}
}
当我通过代码时,它会将我带到内部错误“不应该听到”。在HttpConnectionSocketImpl.class中
{{1}}
堆栈跟踪指示Io异常并指示需要auth。
我只是不明白为什么我的try catch块在进行连接尝试时没有捕获到这个异常。
引起:java.io.IOException:无法通过代理隧道。代理返回“需要HTTP / 1.1 407代理身份验证(Forefront TMG需要授权才能完成请求。拒绝访问Web代理筛选器。” 在sun.net.www.protocol.http.HttpURLConnection.doTunneling(HttpURLConnection.java:2084) ......还有19个
答案 0 :(得分:0)
doTunneling.invoke抛出InvocationTargetException(这是一个ReflectiveOperationException),所以
var gulp = require('gulp');
jade = require('gulp-jade');
sass = require('gulp-sass');
postcss = require('gulp-postcss');
browserSync = require('browser-sync');
autoprefixer = require('autoprefixer-core');
gulp.task('sass', function(){
var processors = [
autoprefixer
];
return gulp.src('sass/main.scss')
.pipe(sass())
.pipe(postcss(processors))
.pipe(gulp.dest('css'));
});
gulp.task('jade', function() {
return gulp.src('jade/index.jade')
.pipe(jade({pretty: true}))
.pipe(gulp.dest(''));
});
gulp.task('watch', function(){
browserSync({
server: {
baseDir: ''
}
});
gulp.watch('**/*.sass', ['doc-watch']);
gulp.watch('**/*.jade', ['doc-watch']);
gulp.watch('**/*.js', ['doc-watch']);
});
gulp.task('doc-watch', ['sass', 'jade'], browserSync.reload);
gulp.task('default', ['doc-watch']);
已执行。
InternalError是一个错误,所以你的
throw new InternalError
没有抓住它。
作为解决方法,您可以使用 catch(错误e) 但这不是一个好主意。
我认为这是
中的错误 catch (IOException
其中签名应该使用throws IOException和
进行扩展java.net.HttpConnectSocketImpl.doTunneling(HttpURLConnection)
如果是IOException,则应抛出(例如java.io.IOException:无法通过代理进行隧道传输。代理返回“需要HTTP / 1.0 407代理身份验证”)
替换单行
socket.connect(addr,getUrlConnectTimeout());
与
java.lang.reflect.InvocationTargetException.getTargetException()
应该给出预期的IOException。
答案 1 :(得分:0)
该错误已被接受,将在更高版本的JDK中解决。请参阅https://bugs.openjdk.java.net/browse/JDK-8173620