有朋自远方来,不亦乐乎。
Java 使用 HTTP Basic Authentication 认证发送Get、Post请求示例
发布于 2年前 ( 2016-12-11 ) 阅读: 2,925 次 评论: 8 条 百度已收录 隐藏边栏
[收起] 文章目录

是HTTP请求中的基本认证,其他客户端程序在请求时提供以用户名和密码形式的凭证的登录方式,以判断它是否允许登录(其中传输方式为BASE64加密)。

Get Post 区别

简单来说,Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。

Get 方法

/**
 	 * Basic Authorization 认证 Get方法  
 	 * @param userName
 	 * @param passWord
 	 * @param url(包含完整的url+参数)
 	 * @return
 	 * @throws Exception
 	 */
	public String doGet(String userName,String passWord,String url)throws Exception{
 		BufferedReader in = null;
 		StringBuffer result = null;
 		try {
 			// 获取接口地址
 			String authStr = userName + ":" + passWord;
 			String encoding = DatatypeConverter.printBase64Binary(authStr.getBytes("UTF-8"));
 			URL realUrl = new URL(url);
			// 打开和URL之间的连接
			HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
			// 设置通用的请求属性
			connection.setRequestProperty("accept", "*/*");
			connection.setRequestProperty("connection", "Keep-Alive");
			connection.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
			connection.setRequestProperty("Authorization", "Basic " + encoding);
			// 建立实际的连接
			connection.connect();
			// 链接超时时间 3分钟  180000毫秒
			connection.setConnectTimeout(180000);
			// 读取页面信息时间 3分钟 180000毫秒
			connection.setReadTimeout(180000);
			int statusCode = connection.getResponseCode();
			if (statusCode == HttpURLConnection.HTTP_OK) {
				in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
				String line = null;
				result = new StringBuffer(); // 请求获取到的回传信息
				while ((line = in.readLine()) != null) {
					result.append(line);
				}
				return result.toString();
			}
			return null;
		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception("doGet 方法执行失败  " + e.getMessage());
		}
 		// 使用finally块来关闭输入流
        finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
 	}

Post 方法

/**
 	 * Basic Authorization 认证 Post方法  
 	 * @param userName
 	 * @param passWord
 	 * @param url
 	 * @param param
 	 * @return
 	 * @throws Exception
 	 */
 	public String doPost(String userName,String passWord,String url,String param)throws Exception{
 		PrintWriter out = null;
 		BufferedReader in = null;
 		StringBuffer result = null;
 		try {
 			String authStr = userName + ":" + passWord;
 			String encoding = DatatypeConverter.printBase64Binary(authStr.getBytes("UTF-8"));
 			URL realUrl = new URL(url);
 			HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
 			connection.setRequestProperty("accept", "*/*");
 			connection.setRequestProperty("connection", "Keep-Alive");
 			connection.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
 			connection.setRequestProperty("Authorization", "Basic " + encoding);
 			// 发送POST请求必须设置如下两行
 			connection.setDoOutput(true);
 			connection.setDoInput(true);
 			// 获取URLConnection对象对应的输出流
 			out = new PrintWriter(connection.getOutputStream());
 			// 发送请求参数
 			out.print(param);
 			// flush输出流的缓冲
 			out.flush();
 			// 定义BufferedReader输入流来读取URL的响应
            int statusCode = connection.getResponseCode();
			if (statusCode == HttpURLConnection.HTTP_OK) {
				// 定义BufferedReader输入流来读取URL的响应
	            in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
	            String line = null;
				result = new StringBuffer(); // 请求获取到的回传信息
	            while ((line = in.readLine()) != null) {
	            	result.append(line);
	            }
	            return result.toString();
			}
            return null;
		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception("doPost 方法执行失败   " + e.getMessage());
		}
 		// 使用finally块来关闭输入流
        finally {
            try {
            	if(out!=null){
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
 	}

调用方法示例

package com.xzblog.send;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.xml.bind.DatatypeConverter;

public class requestToSend {

	/**
	 * @param
	 * @author 晓庄
	 * @date 2016-12-11 17:46:21
	 */
	public static void main(String[] args) {
		String userName = "xzblog"; // 请求用户名
		String passWord = "xzblog"; // 请求密码
		String param = "param";		// 请求参数
		String url = "https://www.xzblog.cn/get?param=" + param;
		try {
			requestToSend rts = new requestToSend();
			// 调用 Get 请求方法
			String doGetResult = rts.doGet(userName, passWord, url);
			// 得到 Get 请求返回的结果
			System.out.println(doGetResult);
			
			// 调用 Post 请求方法
			String doPostResult = rts.doPost(userName, passWord, url, param);
			// 得到 Post 请求返回的结果
			System.out.println(doPostResult);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

目前评论:8   其中:访客  5   博主  3

发表评论

有人回复时邮件通知我

请稍候,正在加载新评论...
  1. 凯哥自媒体 ( 2016.12.19 9:47:26 ) 河南省郑州市 电信 | Windows 7 | Chrome 47.0.2526.106 #1

    小庄更新频率不是太高啊

    • 晓庄 ( 2016.12.19 21:07:09 ) 广东省深圳市 电信 | Windows 8.1 | Chrome 55.0.2883.87

      @凯哥自媒体 没什么多余的时间去更新啊

  2. 凯哥自媒体 ( 2016.12.19 16:16:00 ) 河南省郑州市 电信 | Windows 7 | Chrome 47.0.2526.106 #2

    分享的不错,谢谢

  3. 摩天之星 ( 2017.02.15 12:07:14 ) 广东省深圳市 电信 | Windows 7 | Firefox 51.0 #3

    厉害大神

    • 晓庄 ( 2017.02.18 17:59:04 ) 广东省深圳市 电信 | Windows 8.1 | Chrome 56.0.2924.87

      @摩天之星 不厉害

  4. 明月登楼学习Blog ( 2017.04.08 21:31:45 ) 河南省南阳市 电信 | Android 6.0.1 | Chrome 40.0.2214.89 #4

    不错,过来支持一下!

    • 晓庄 ( 2017.04.18 0:08:12 ) 广东省深圳市 电信 | Windows 8.1 | Chrome 57.0.2987.133

      @明月登楼学习Blog 常来,要不要链起来呗。