java发送http请求——使用HttpURLConnection

本文介绍了如何使用Java的HttpURLConnection类进行HTTP的GET和POST请求,详细阐述了原生库的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用java.net原生的HttpURLConnection类实现http的get和post请求

参考文章https://www.cnblogs.com/hhhshct/p/8523697.html

package com.alison.http;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.io.*;

public class DoHttpRequest {

	/**
	 * @description 发送HTTP的get请求
	 * @param url
	 *            请求的http路径url
	 * @param params
	 *            附加的参数,形如'name=lxj&password=123&msg=thanks'
	 * @return	map类型,两个键,headers和response,分别对应信息头字段和返回主体
	 */
	public static Map<String, Object> makeGetRequest(String url, String params) {
		
		Map<String, Object> result = new HashMap<String, Object>();
		String response = "";
		Map<String, List<String>> headers = new HashMap<String, List<String>>();
		
		HttpURLConnection conn = null;
		BufferedReader br = null;
		
		try {
			//远程连接URL
			URL url0 = new URL(url);
			//建立连接,HttpURLConnection对象,由url对象openConnection获得
			conn = (HttpURLConnection) url0.openConnection();
			conn.setDoInput(true);
			conn.setDoOutput(true);
			//设置请求方式GET
			conn.setRequestMethod("GET");
			//设定连接超时时间 15s
			conn.setConnectTimeout(15000);
			//设定读取远程返回数据时间 6s
			conn.setReadTimeout(6000);
			//设定连接参数,accept,connection,user-agent,accept-charset,authorization,cookie,referer等
			conn.setRequestProperty("accept", "*/*");
			conn.setRequestProperty("connection", "Keep-Alive");
			conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
			//建立实质的连接
			conn.connect();
			
			//获取所有响应头字段
			headers = conn.getHeaderFields();
			for(String key : headers.keySet()){
				System.out.println(key + ":" + headers.get(key));
			}	
			
			//读取返回信息流内容
			br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
			String line;
			while((line = br.readLine()) != null){
//				System.out.println(line);
				response += line;
			}

		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e1) {
			e1.printStackTrace();
		}finally{
			if(br!=null){
				try {
					br.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		
		result.put("headers", headers);
		result.put("response", response);
		
		return result;

	}

	/**
	 * @description 发送HTTP的post请求
	 * @param url
	 *            请求的http路径url
	 * @param body
	 *            附加的参数,json格式,{'name':'lxj', 'password':'123', 'msg':'thanks'}
	 * @return	string类型,返回response信息主体
	 */
	public static String makePostRequest(String url, String body) {
		
		String result = "";
		BufferedReader br = null;
		PrintWriter pw = null;
		
		try {
			URL url1 = new URL(url);
			HttpURLConnection conn = (HttpURLConnection) url1.openConnection();
			conn.setRequestMethod("POST");
			conn.setDoInput(true);
			conn.setDoOutput(true);		//要写入body体,就得设定output为true
			//除了写入body之外,其他设定基本同get方法
			pw = new PrintWriter(conn.getOutputStream());
			pw.print(body);
			conn.setRequestProperty("accept", "*/*");
			conn.setRequestProperty("connection", "Keep-Alive");
			conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
			conn.connect();
			
			br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
			String line ;
			while((line = br.readLine()) != null){
				System.out.println(br);
				result += line;
			}
			
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e1) {
			e1.printStackTrace();
		} finally {
			try {
				pw.close();
				br.close();
			} catch (IOException e2) {
				// TODO Auto-generated catch block
				e2.printStackTrace();
			}
		}
		
		return result;

	}

	public static void main(String[] args) {
		
		String getUrl = "http://www.baidu.com";
		String body = "{'name':'lxj', 'password':'123', 'msg':'thanks'}";
		
//		String c = makePostRequest(getUrl, body);
//		System.out.println("-->" + c);
		Map<String, Object> map = makeGetRequest(getUrl, "");
		System.out.println("*************");
		System.out.println(map.keySet());
		System.out.println(map.get("response"));
		System.out.println(map.get("headers"));
	}

}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值