无法通过代理隧道。代理通过https返回“ HTTP / 1.1 407”

浏览:43日期:2024-02-21
如何解决无法通过代理隧道。代理通过https返回“ HTTP / 1.1 407”?

您必须将变量 和 编辑 为空白:

jdk.http.auth.tunneling.disabledSchemes=jdk.http.auth.proxying.disabledSchemes=

就我而言,我在此文件中找到了

jdk1.8.0_111 / jre / lib / net.properties

解决方法

我面临着Java6 /8的奇怪行为。我尝试通过需要基本用户身份验证的代理进行隧道传输。通过标准的Java身份验证器执行此操作。如果我尝试访问https网址作为第一个网址,则会引发异常:

java.io.IOException:无法通过代理隧道。代理返回“需要HTTP / 1.1 407代理身份验证”

但是,如果我先访问http URL,然后再访问https URL,则https访问正常。

鉴于该代码:

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.Authenticator;import java.net.HttpURLConnection;import java.net.InetSocketAddress;import java.net.PasswordAuthentication;import java.net.Proxy;import java.net.URL;public class ProxyPass { public ProxyPass( String proxyHost,int proxyPort,final String userid,final String password,String url ) { try { /* Create a HttpURLConnection Object and set the properties */ URL u = new URL( url ); Proxy proxy = new Proxy( Proxy.Type.HTTP,new InetSocketAddress( proxyHost,proxyPort ) ); HttpURLConnection uc = (HttpURLConnection) u.openConnection( proxy ); Authenticator.setDefault( new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() { if (getRequestorType().equals( RequestorType.PROXY )) {return new PasswordAuthentication( userid,password.toCharArray() ); } return super.getPasswordAuthentication();} } ); uc.connect(); /* Print the content of the url to the console. */ showContent( uc );}catch (IOException e) { e.printStackTrace();} } private void showContent( HttpURLConnection uc ) throws IOException {InputStream i = uc.getInputStream();char c;InputStreamReader isr = new InputStreamReader( i );BufferedReader br = new BufferedReader( isr );String line;while ((line = br.readLine()) != null) { System.out.println( line );} } public static void main( String[] args ) {String proxyhost = 'proxyHost';int proxyport = proxyPort;final String proxylogin = proxyUser;final String proxypass = proxyPass;String url = 'http://www.google.de';String surl = 'https://www.google.de';// new ProxyPass( proxyhost,proxyport,proxylogin,proxypass,url ); // uncomment this line to see that the https request works!// System.out.println( url + ' ...ok' ); // uncomment this line to see that the https request works!new ProxyPass( proxyhost,surl );System.out.println( surl + ' ...ok' ); }

有什么建议,想法吗?

相关文章: