您的位置:首页 > 理论基础 > 计算机网络

java小白日记1--http请求添加Authorization验证

2013-12-16 17:15 549 查看
接触java一年有余,如今第一次动手写相关博客。以往都是在各为前辈的文章里寻求帮助,现在我来分享一些自己遇到的问题。

 

问题的经过是这样,我写的一个小程序要去公司的一台服务器上抓取一个页面数据,这台服务器前段时间因为故障重启了一下,不知为何再去抓取的时候会报io异常,信息代码401,在网上查了一下,是需要Authorization验证。和同事问到了验证的用户密码,但是不知道怎样在请求时添加认证信息。查API,翻来翻去只发现应该是通过 HttpURLConnection 的 setRequestProperty(String key, String value) 方法来实现,但不知道 key 和 value 分别应该怎么写。终于,去谷歌(思维习惯要改啊)……

那么,解决方法如下:

        关键代码:

String authString = user + ":" + password;

byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());

String authStringEnc = new String(authEncBytes);

connection.setRequestProperty("Authorization", "Basic " + authStringEnc);

 

其中 Base64.encodeBase64(authString.getBytes()); 需要用到 commons-codec.jar 包

 

完整的下载代码如下

 

public String DownloadFromUrl(String urlstr,String code,String user,String password) throws MalformedURLException{

  StringBuilder data = new StringBuilder();

  URL url = new URL(urlstr);

  int counts = 0;

  while(true){

   try {

    HttpURLConnection connection = (HttpURLConnection) url.openConnection();

    String authString = user + ":" + password;

//    System.out.println("auth string: " + authString);

    byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());

    String authStringEnc = new String(authEncBytes);

    connection.setRequestProperty("Authorization", "Basic " + authStringEnc);

//    System.out.println("Base64 encoded auth string: " + authStringEnc);

    connection.setRequestProperty("User-Agent", "MSIE 7.0");

    connection.setConnectTimeout(5000);

    BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), code));

    String line = null;

    while ((line = br.readLine()) != null) {

     data.append(line);

     data.append("\r\n");

    }

    connection.disconnect();

    break;

   } catch (ConnectException e) {          

    if(counts >=5){

     System.out.println(urlstr+" : "+e.toString());

//     e.printStackTrace();

     return null;

    }

    counts++;

    System.out.println("再次尝试");

    continue;

   } catch (Exception e) {          

    if(counts >=5){

     System.out.println(urlstr+" : "+e.toString());

//     e.printStackTrace();

     return null;

    }

    counts++;

    System.out.println("再次尝试");

    continue;

   }

  }

  return data.toString(); 

 }

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐