HttpURLConnection Basic auth 认证验证,java获取Basic auth认证数据

本文介绍了如何在Java中使用HttpURLConnection实现基本的HTTP Basic Authentication,详细讲解了认证过程,并探讨了如何获取和处理认证数据,适用于需要在Java应用中进行HTTP请求的身份验证场景。

import org.apache.commons.codec.binary.Base64;

import javax.net.ssl.HttpsURLConnection;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Date;

public class Https16 {
	
	public static void main(String[] args) {
		
		String url="http://127.0.0.1/xpages/view.nsf/ag_treegrid_load?openagent&id=0.768400088888856";
		//System.out.println(GetUrl(url,"admin","3624"));
		url="http://127.0.0.1/xpages/view.nsf/ag_ztree?openagent&id=0.9666194579210685";
		System.out.println(FromUrlPost(url,"admin","3624","id=5&name=Partner",true));
	}
	
	public static String GetUrl(String strurl,String username,String password){
		return FromUrl("GET", strurl, username, password);
	}
	
	public static String PostUrl(String strurl,String username,String password){
		return FromUrl("POST", strurl, username, password);
	}
	
	public String PostUrl_Pro(String strurl,String username,String password,String xml,String contentType){
		return FromUrl_Pro("POST", strurl, username, password,xml,contentType);
	}
	/*
	 * post请求
	 */
	public static String FromUrlPost(String strurl,String username,String password,String xml,boolean SOAPAction){
		HttpURLConnection connection = null;
		InputStream is = null;
		BufferedReader br = null;
		String result = null;// 返回结果字符串
		OutputStream out = null;
		
		Date d1 = new Date();

		try {
		
			// 创建远程url连接对象
			URL url = new URL(strurl);
			// 通过远程url连接对象打开一个连接,强转成httpURLConnection类
			
			connection = (HttpURLConnection) url.openConnection();
			// 设置连接方式:GET,POST
			connection.setRequestMethod("POST");

			connection.setDoInput(true);
			connection.setDoOutput(true);
			
			connection.setRequestProperty("Content-Type", "text/xml;charset=utf-8");
			if(SOAPAction){
				connection.setRequestProperty("SOAPAction", "");
			}
			//使用base64进行加密
			byte[] tokenByte = Base64.encodeBase64((username+":"+password).getBytes());
			//将加密的信息转换为string
			String tokenStr = new String(tokenByte,"UTF-8");
			//Basic YFUDIBGDJHFK78HFJDHF==    token的格式
			String token = "Basic "+tokenStr;
			//System.out.println(token);
			connection.setRequestProperty("Authorization",token);
						
			// 设置连接主机服务器的超时时间:15000毫秒
			connection.setConnectTimeout(15000);
			// 设置读取远程返回的数据时间:60000毫秒
			connection.setReadTimeout(60000);

			// 发送请求
			connection.connect();
			out = connection.getOutputStream(); // 获取输出流对象
			connection.getOutputStream().write(xml.getBytes("UTF-8")); // 将要提交服务器的SOAP请求字符流写入输出流
			out.flush();
			out.close();

			//System.out.println(connection.getResponseCode());

			// 通过connection连接,获取输入流
			if (connection.getResponseCode() == 200) {
				is = connection.getInputStream();
				// 封装输入流is,并指定字符集
				br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
				// 存放数据
				StringBuffer sbf = new StringBuffer();
				String temp = null;
				while ((temp = br.readLine()) != null) {
					sbf.append(temp);
					sbf.append("\r\n");
				}
				result = sbf.toString();
			}
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// 关闭资源
			if (null != br) {
				try {
					br.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

			if (null != is) {
				try {
					is.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

			connection.disconnect();// 关闭远程连接

		}

		Date d2 = new Date();
		//System.out.println(d2.getTime() - d1.getTime());
		//System.out.println("****** END ********");		
		//System.out.println();
		return result;
	}
	
	public static String FromUrl(String GorP,String strurl,String username,String password){
		HttpURLConnection connection = null;
		InputStream is = null;
		BufferedReader br = null;
		String result = null;// 返回结果字符串

		Date d1 = new Date();

		try {
			//String strurl="https://apisalesdemo2.successfactors.eu/odata/v2/?$format=json";
			//String strurl2="https://apisalesdemo2.successfactors.eu/odata/v2/WfRequest?$filter=status eq 'PENDING'&$select=wfRequestId,status,createdOn&$format=json";
			// 创建远程url连接对象
			URL url = new URL(strurl);
			// 通过远程url连接对象打开一个连接,强转成httpURLConnection类
			//connection = (HttpsURLConnection) url.openConnection();
			connection = (HttpURLConnection) url.openConnection();

			//connection.setSSLSocketFactory(new TLSSocketConnectionFactory());
			connection.setDoInput(true);
			connection.setDoOutput(true);
			
			 //username="apiuser@SFPART033161";
			 //password="Welcome1";
			
			//使用base64进行加密
			byte[] tokenByte = Base64.encodeBase64((username+":"+password).getBytes());
			//将加密的信息转换为string
			String tokenStr = new String(tokenByte,"UTF-8");
			//Basic YFUDIBGDJHFK78HFJDHF==    token的格式
			String token = "Basic "+tokenStr;
			//System.out.println(token);
			connection.setRequestProperty("Authorization",token);
						
			// 设置连接方式:GET,POST
			connection.setRequestMethod(GorP);
			// 设置连接主机服务器的超时时间:15000毫秒
			connection.setConnectTimeout(15000);
			// 设置读取远程返回的数据时间:60000毫秒
			connection.setReadTimeout(60000);

			// 发送请求
			connection.connect();



			// 通过connection连接,获取输入流
			if (connection.getResponseCode() == 200) {
				is = connection.getInputStream();
				// 封装输入流is,并指定字符集
				br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
				// 存放数据
				StringBuffer sbf = new StringBuffer();
				String temp = null;
				while ((temp = br.readLine()) != null) {
					sbf.append(temp);
					sbf.append("\r\n");
				}
				result = sbf.toString();
			}else {
				System.out.println(connection.getResponseCode());
			}
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// 关闭资源
			if (null != br) {
				try {
					br.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

			if (null != is) {
				try {
					is.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

			connection.disconnect();// 关闭远程连接

		}

		Date d2 = new Date();

		//System.out.println(d2.getTime() - d1.getTime());

		//System.out.println("****** END ********");
		
		//System.out.println();
		return result;
	}
	
	public String FromUrl_Pro(String GorP,String strurl
			,String username,String password,String xml,String contentType){
		HttpsURLConnection connection = null;
		InputStream is = null;
		BufferedReader br = null;
		String result = null;// 返回结果字符串

		Date d1 = new Date();

		try {
			//String strurl="https://apisalesdemo2.successfactors.eu/odata/v2/?$format=json";
			//String strurl2="https://apisalesdemo2.successfactors.eu/odata/v2/WfRequest?$filter=status eq 'PENDING'&$select=wfRequestId,status,createdOn&$format=json";
			// 创建远程url连接对象
			URL url = new URL(strurl);
			// 通过远程url连接对象打开一个连接,强转成httpURLConnection类
			connection = (HttpsURLConnection) url.openConnection();

			//connection.setSSLSocketFactory(new TLSSocketConnectionFactory());
			connection.setDoInput(true);
			connection.setDoOutput(true);			
			 //username="apiuser@SFPART033161";
			 //password="Welcome1";			
			//使用base64进行加密
			byte[] tokenByte = Base64.encodeBase64((username+":"+password).getBytes());
			//将加密的信息转换为string
			String tokenStr = new String(tokenByte,"UTF-8");
			//Basic YFUDIBGDJHFK78HFJDHF==    token的格式
			String token = "Basic "+tokenStr;
			//System.out.println(token);
			
			connection.setRequestProperty("Authorization",token);
			connection.setRequestProperty("Content-Type", contentType);
						
			// 设置连接方式:GET,POST
			connection.setRequestMethod(GorP);
			// 设置连接主机服务器的超时时间:15000毫秒
			connection.setConnectTimeout(15000);
			// 设置读取远程返回的数据时间:60000毫秒
			connection.setReadTimeout(60000);

			// 发送请求
			connection.connect();
			OutputStream out = connection.getOutputStream(); // 获取输出流对象
			connection.getOutputStream().write(xml.getBytes("UTF-8")); // 将要提交服务器的SOAP请求字符流写入输出流
			out.flush();
			out.close();

			System.out.println(connection.getResponseCode());

			// 通过connection连接,获取输入流
			if (connection.getResponseCode() == 200) {
				is = connection.getInputStream();
				// 封装输入流is,并指定字符集
				br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
				// 存放数据
				StringBuffer sbf = new StringBuffer();
				String temp = null;
				while ((temp = br.readLine()) != null) {
					sbf.append(temp);
					sbf.append("\r\n");
				}
				result = sbf.toString();
			}
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// 关闭资源
			if (null != br) {
				try {
					br.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

			if (null != is) {
				try {
					is.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

			connection.disconnect();// 关闭远程连接

		}

		Date d2 = new Date();

		System.out.println(d2.getTime() - d1.getTime());

		System.out.println("****** END ********");
		
		//System.out.println();
		return result;
	}
	
	
	/**
	 * 
	 * @param strurl  https://<hostname>/odata/v2/approveWfRequest
	 * 				  不用传?wfRequestId=1234L
	 * @param username
	 * @param password
	 * @param wfRequestId
	 * @param Param
	 * @return
	 * @throws UnsupportedEncodingException
	 */
	public String ApproveFlowPost(String strurl,String username,String password,			
			String wfRequestId,String Param) throws UnsupportedEncodingException{
		//使用此工具可以将键值对编码成"Key=Value&amp;Key2=Value2&amp;Key3=Value3&rdquo;形式的请求参数 
		String requestParam =URLEncoder.encode(Param ,"UTF-8"); 
		String appurl=strurl+"?wfRequestId="+wfRequestId+"L&comment="+requestParam+"&$format=json";
		//String appurl=strurl+"?wfRequestId="+wfRequestId+"L&$format=json";
		return FromUrl("POST", appurl, username, password);
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weijia3624

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值