【问题标题】:How to bypass the proxy using java如何使用java绕过代理
【发布时间】:2012-04-17 06:13:09
【问题描述】:

下面是我的代码

import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;

import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;

import com.sun.org.apache.xml.internal.security.utils.Base64;

public class webpageDisplay {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        System.getProperties().put( "proxySet", "true" ); 
        System.getProperties().put( "proxyHost", "I given proxy host" ); 
        System.getProperties().put( "proxyPort", "85" ); 
        URL url=new URL("http://www.yahoo.com");
        URLConnection uc = url.openConnection ();
        String encoded = new String
              (Base64.encode(new String("user:pass").getBytes()));
        uc.setRequestProperty("Proxy-Authorization", "Basic " + encoded);
        uc.connect();

         //String url = "http://www.yahoo.com";
            JEditorPane editor = new JEditorPane(url);
            editor.setEditable(false);
            JScrollPane pane = new JScrollPane(editor);
            JFrame f = new JFrame("HTML Demo");
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.getContentPane().add(pane);
            f.setSize(800, 600);
            f.setVisible(true);


    }

}

即使我提供了代理主机和用户 ID,我仍然遇到如下错误

Exception in thread "main" java.net.UnknownHostException: www.yahoo.com
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:196)
    at java.net.Socket.connect(Socket.java:530)
    at java.net.Socket.connect(Socket.java:480)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:169)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:406)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:541)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:245)
    at sun.net.www.http.HttpClient.New(HttpClient.java:318)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:790)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:738)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:649)
    at webpageDisplay.main(webpageDisplay.java:26)

任何人都可以建议如何解决问题或我如何绕过代理

【问题讨论】:

  • proxySet 什么都不做。这是一个都市神话。

标签: java


【解决方案1】:

您需要使用属性http.proxyHosthttp.proxyPort 而不仅仅是proxyHostproxyPort

示例代码见以下问题:

How to use an HTTP proxy in java

Connect to a site using proxy code in java

【讨论】:

    【解决方案2】:

    你已经过了一半的桥。必须更改您传递 UID/pwd 的方式

    您还需要一个 java.net.Authenticator 对象,必须调用其静态 setDefault() 方法来设置身份验证。更多信息请看这里

    http://docs.oracle.com/javase/6/docs/technotes/guides/net/http-auth.html

    【讨论】:

      【解决方案3】:
      System.setProperty("http.proxyHost", "132.186.192.234");
      System.setProperty("http.proxyPort", "8080");
      System.setProperty("https.proxyUser", "ad001\\userid");
      System.setProperty("https.proxyPassword", "sect");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-09
        • 2015-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-08
        相关资源
        最近更新 更多