package src.test;   
  
import java.io.IOException;   
import java.io.InputStream;   
import java.net.HttpURLConnection;   
import java.net.URL;   
  
import sun.misc.BASE64Encoder;   
  
public class URLTest {   
       
    public static void main(String[] args){   
        try{   
            System.setProperty("proxySet", "true");   
            System.setProperty("http.proxyHost", "11.0.1.210");   
            System.setProperty("http.proxyPort", "8080");   
               
            URL u = new URL("http://www.baidu.com");   
            HttpURLConnection conn = (HttpURLConnection)u.openConnection();   
  
            String authentication = "caixian2:96191264";   
            String encodedLogin = new BASE64Encoder().encodeBuffer(authentication.getBytes());    
            conn.setRequestProperty("Proxy-Authorization", "Basic " + encodedLogin);    
            conn.connect();   
               
            int length = conn.getContentLength();   
            System.out.println(length);   
            InputStream is = conn.getInputStream();   
            byte[] b = new byte[4 * 1024];   
            is.read(b);   
            for(int i = 0; i < b.length; i++){   
                System.out.print((char)b[i]);   
            }   
        }catch(IOException e){   
            e.printStackTrace();   
        }   
    }   
}  package src.test;import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;import sun.misc.BASE64Encoder;public class URLTest {

public static void main(String[] args){
try{
System.setProperty("proxySet", "true");
System.setProperty("http.proxyHost", "11.0.1.210");
System.setProperty("http.proxyPort", "8080");

URL u = new URL("http://www.baidu.com");
HttpURLConnection conn = (HttpURLConnection)u.openConnection(); String authentication = "caixian2:96191264";
String encodedLogin = new BASE64Encoder().encodeBuffer(authentication.getBytes()); 
conn.setRequestProperty("Proxy-Authorization", "Basic " + encodedLogin); 
conn.connect();

int length = conn.getContentLength();
System.out.println(length);
InputStream is = conn.getInputStream();
byte[] b = new byte[4 * 1024];
is.read(b);
for(int i = 0; i < b.length; i++){
System.out.print((char)b[i]);
}
}catch(IOException e){
e.printStackTrace();
}
}
}我在单位的内部网通过代理设置上网,现在想写个程序来访问外部网,在网上找了哈偶都资料,我个人感觉代码应该没有错误啊,可是就是报异常,如下: java.lang.IllegalArgumentException: Illegal character(s) in message header value: Basic Y2FpeGlhbjI6OTYxOTEyNjQ=   
  
    at sun.net.www.protocol.http.HttpURLConnection.checkMessageHeader(HttpURLConnection.java:200)   
    at sun.net.www.protocol.http.HttpURLConnection.setRequestProperty(HttpURLConnection.java:1553)   
    at src.test.URLTest.main(URLTest.java:23)   
Exception in thread "main"   java.lang.IllegalArgumentException: Illegal character(s) in message header value: Basic Y2FpeGlhbjI6OTYxOTEyNjQ= at sun.net.www.protocol.http.HttpURLConnection.checkMessageHeader(HttpURLConnection.java:200)
at sun.net.www.protocol.http.HttpURLConnection.setRequestProperty(HttpURLConnection.java:1553)
at src.test.URLTest.main(URLTest.java:23)
Exception in thread "main" 
高人们帮个忙,看看我哪里还写错了,非常感谢!!! 

解决方案 »

  1.   

    看一下这个,这个是sun JDK的一个BUG http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6459815;对于Base64编码的处理中换行符的处理。
      

  2.   

    问下楼上的两位,你们是怎么知道是换行符的问题的呢?
    是和 Basic Y2FpeGlhbjI6OTYxOTEyNjQ= 有关嘛?
      

  3.   

    还得问下,为什么程序执行到 int length = conn.getContentLength();
     这一行的时候就卡住了呢,一直都不向下走!!!
      

  4.   

    你试一下这个uc.setRequestProperty("Connection", "close");然后你用uc.getInputStream()获取内容,然后内容的长度由你的程序来计算吧,至于你为什么卡住了,由可能是你的网络问题吧。