当前位置: 首页 > 面试题库 >

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

金令
2023-03-14
问题内容

我面临着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() {
                @Override
                protected 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, proxyport, proxylogin, proxypass, surl );
        System.out.println( surl + " ...ok" );
    }

有什么建议,想法吗?


问题答案:

您必须将变量 jdk.http.auth.tunneling.disabledSchemes
jdk.http.auth.proxying.disabledSchemes 编辑 为空白:

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

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

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



 类似资料:
  • 问题内容: 我在使用HTTP代理(仅允许http连接)的网络的笔记本电脑(Ubuntu)上。 当我将svn用作诸如“ http:// .....”之类的url时,一切都很酷(google chrome存储库工作完美),但是现在我需要使用svn:// …从服务器进行svn了。我看到连接被拒绝。 我已经在/ etc / subversion / servers中设置了代理配置,但这没有帮助。 有人有意

  • 我已经在ASP.NET webform中实现了signalR,它运行良好,但当我在服务器上托管时,它不工作,在chrome浏览器的控制台中显示如下错误。 WebSocket连接到'ws://demo.in/signalr/connect?失败了。 我的ASP.NET应用程序框架版本是4.5.1 IIS版本为8.5 Windows Server是2012R2 Wedsocket已启用 如果有人知道请

  • 我有两台机器:machine foo()运行redis服务器,而machine bar()运行通过Jedis连接到foo的java应用程序。当给jedis提供地址时,一切都很好。 但是我不信任foo和bar之间的路由器,redis也不支持SSL。因此,我设置了一个从bar到foo:的ssh隧道 现在,从bar中,我可以直接在或通过隧道在成功地telnet到foo上的redis。对于jedis,如果

  • 大约两天以来,我一直在努力解决一个问题,似乎没有找到解决办法。 为了提高对我们产品中系统代理设置的支持,我写了一个测试应用程序,对一个小型超文本传输协议代理服务器做一些测试,我在docker镜像中运行。 一方面,我与普通URL. openStream()连接...这工作得很好。它可以识别我的开发人员框设置,我将其指向docker run squid或tinyagent,它可以从Web下载文件。 我

  • 以下是我试图实现的目标:我有一个TCP客户端,需要连接到我们的服务器应用程序,但我需要通过HTTPS进行通信。据我所知,这可以通过反向(或正向?)代理如下: 我使用以下vhost配置成功创建了一个不带SSL的代理: (我不确定这些参数中是否有任何一个是不必要的tbh) 使用该vhost,我可以像这样启动与服务器的tcp连接: 一旦我添加SSL并使用端口443,我就无法再连接了: 如果我尝试连接到此

  • 问题内容: 自Java 8 Update 111以来,我们的某些客户无法再运行Java Web Start客户端。他们得到: java.io.IOException:无法通过代理隧道。代理返回“需要HTTP / 1.1 407代理身份验证 看起来与此更改有关: 现在,默认情况下,在为HTTPS设置隧道时需要基本身份验证的代理将不再成功。如果需要,可以通过从jdk.http.auth.tunneli