使用java中的代理代码连接到站点

Nit*_*hin 4 java connection proxy

我想通过java中的代理连接到网站.这是我写的代码:

public class ConnectThroughProxy 
{
    Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxy ip", 8080));
    public static void main(String[] args) 
    {
        try
        {
            URL url = new URL("http://www.rgagnon.com/javadetails/java-0085.html");
            URLConnection connection=url.openConnection();
            String encoded = new String(Base64.encode(new String("user_name:pass_word").getBytes()));
            connection.setDoOutput(true);
            connection.setRequestProperty("Proxy-Authorization","Basic "+encoded);
            String page="";
            String line;
            StringBuffer tmp = new StringBuffer();
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            while ((line=in.readLine()) != null)
            {
                page.concat(line + "\n");
            }
            System.out.println(page);
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
    }
Run Code Online (Sandbox Code Playgroud)

在尝试运行此代码时,它会引发以下错误:

java.lang.IllegalArgumentException:如果消息头值非法字符(或多个):基本dXNlcl9uYW1lOnBhc3Nfd29yZA ==
在sun.net.www.protocol.http.HttpURLConnection.checkMessageHeader(HttpURLConnection.java:323)
在sun.net.www.protocol. http.HttpURLConnection.setRequestProperty(HttpURLConnection.java:2054)
在test.ConnectThroughProxy.main(ConnectThroughProxy.java:30)

任何想法怎么做?

Cur*_*tis 11

如果您只是尝试通过HTTP代理服务器发出HTTP请求,则不需要付出太多努力.这里有一篇文章:http://java.sun.com/javase/6/docs/technotes/guides/net/proxies.html

但它基本上归结为只在命令行或代码中设置http.proxyHost和http.proxyPort环境属性:

// Set the http proxy to webcache.mydomain.com:8080
System.setProperty("http.proxyHost", "webcache.mydomain.com");
System.setProperty("http.proxyPort", "8080");

// Next connection will be through proxy.
URL url = new URL("http://java.sun.com/");
InputStream in = url.openStream();

// Now, let's 'unset' the proxy.
System.clearProperty("http.proxyHost");

// From now on HTTP connections will be done directly.