首页 > 编程语言 >java原生发送http请求

java原生发送http请求

时间:2022-10-09 12:01:12浏览次数:68  
标签:原生 http String import connection new java null


根据技术选型总结常见的三种方式发送http请求,本问介绍jdk原生方式,其他两种如下链接

​httpclient和okhttp​

​Springboot整合RestTemplate发送http请求​

使用JDK原生提供的net包下的HttpURLConnection、URLConnection、Socket三个类都可实现,无需其他jar包

1、HttpURLConnection类实现

HttpURLConnection是URLConnection的子类,提供更多的方法,使用更方便。

比较原始的一种调用做法,这里把get请求和post请求都统一放在一个方法里面。

请求过程

GET:
1、创建远程连接
2、设置连接方式(get、post、put。。。)
3、设置连接超时时间
4、设置响应读取时间
5、发起请求
6、获取请求数据
7、关闭连接

POST:
1、创建远程连接
2、设置连接方式(get、post、put。。。)
3、设置连接超时时间
4、设置响应读取时间
5、当向远程服务器传送数据/写数据时,需要设置为true(setDoOutput)
6、当前向远程服务读取数据时,设置为true,该参数可有可无(setDoInput)
7、设置传入参数的格式:(setRequestProperty)
8、设置鉴权信息:Authorization:(setRequestProperty)
9、设置参数
10、发起请求
11、获取请求数据
12、关闭连接

代码

package com.riemann.springbootdemo.util.common.httpConnectionUtil;

import org.springframework.lang.Nullable;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;


public class HttpURLConnectionUtil {

/**
* Http get请求
* @param httpUrl 连接
* @return 响应数据
*/
public static String doGet(String httpUrl){
//链接
HttpURLConnection connection = null;
InputStream is = null;
BufferedReader br = null;
StringBuffer result = new StringBuffer();
try {
//创建连接
URL url = new URL(httpUrl);
connection = (HttpURLConnection) url.openConnection();
//设置请求方式
connection.setRequestMethod("GET");
//设置连接超时时间
connection.setReadTimeout(15000);
//开始连接
connection.connect();
//获取响应数据
if (connection.getResponseCode() == 200) {
//获取返回的数据
is = connection.getInputStream();
if (null != is) {
br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String temp = null;
while (null != (temp = br.readLine())) {
result.append(temp);
}
}
}
} 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();
}
return result.toString();
}

/**
* Http post请求
* @param httpUrl 连接
* @param param 参数
* @return
*/
public static String doPost(String httpUrl, @Nullable String param) {
StringBuffer result = new StringBuffer();
//连接
HttpURLConnection connection = null;
OutputStream os = null;
InputStream is = null;
BufferedReader br = null;
try {
//创建连接对象
URL url = new URL(httpUrl);
//创建连接
connection = (HttpURLConnection) url.openConnection();
//设置请求方法
connection.setRequestMethod("POST");
//设置连接超时时间
connection.setConnectTimeout(15000);
//设置读取超时时间
connection.setReadTimeout(15000);
//DoOutput设置是否向httpUrlConnection输出,DoInput设置是否从httpUrlConnection读入,此外发送post请求必须设置这两个
//设置是否可读取
connection.setDoOutput(true);
connection.setDoInput(true);
//设置通用的请求属性
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("Content-Type", "application/json;charset=utf-8");

//拼装参数
if (null != param && param.equals("")) {
//设置参数
os = connection.getOutputStream();
//拼装参数
os.write(param.getBytes("UTF-8"));
}
//设置权限
//设置请求头等
//开启连接
//connection.connect();
//读取响应
if (connection.getResponseCode() == 200) {
is = connection.getInputStream();
if (null != is) {
br = new BufferedReader(new InputStreamReader(is, "GBK"));
String temp = null;
while (null != (temp = br.readLine())) {
result.append(temp);
result.append("\r\n");
}
}
}

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭连接
if(br!=null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(os!=null){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(is!=null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//关闭连接
connection.disconnect();
}
return result.toString();
}

public static void main(String[] args) {
String message = doPost("https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=13026194071", "");
System.out.println(message);
}
}

2、URLConnection类实现

package uRLConnection;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

public class URLConnectionHelper {

public static String sendRequest(String urlParam) {

URLConnection con = null;

BufferedReader buffer = null;
StringBuffer resultBuffer = null;

try {
URL url = new URL(urlParam);
con = url.openConnection();

//设置请求需要返回的数据类型和字符集类型
con.setRequestProperty("Content-Type", "application/json;charset=GBK");
//允许写出
con.setDoOutput(true);
//允许读入
con.setDoInput(true);
//不使用缓存
con.setUseCaches(false);
//得到响应流
InputStream inputStream = con.getInputStream();
//将响应流转换成字符串
resultBuffer = new StringBuffer();
String line;
buffer = new BufferedReader(new InputStreamReader(inputStream, "GBK"));
while ((line = buffer.readLine()) != null) {
resultBuffer.append(line);
}
return resultBuffer.toString();

}catch(Exception e) {
e.printStackTrace();
}

return "";
}
public static void main(String[] args) {
String url ="http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=120.79.75.96";
System.out.println(sendRequest(url));
}
}

3、Socket类实现

package socket;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.URLEncoder;

import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;

public class SocketForHttpTest {

private int port;
private String host;
private Socket socket;
private BufferedReader bufferedReader;
private BufferedWriter bufferedWriter;

public SocketForHttpTest(String host,int port) throws Exception{

this.host = host;
this.port = port;

/**
* http协议
*/
// socket = new Socket(this.host, this.port);

/**
* https协议
*/
socket = (SSLSocket)((SSLSocketFactory)SSLSocketFactory.getDefault()).createSocket(this.host, this.port);


}

public void sendGet() throws IOException{
//String requestUrlPath = "/z69183787/article/details/17580325";
String requestUrlPath = "/";

OutputStreamWriter streamWriter = new OutputStreamWriter(socket.getOutputStream());
bufferedWriter = new BufferedWriter(streamWriter);
bufferedWriter.write("GET " + requestUrlPath + " HTTP/1.1\r\n");
bufferedWriter.write("Host: " + this.host + "\r\n");
bufferedWriter.write("\r\n");
bufferedWriter.flush();

BufferedInputStream streamReader = new BufferedInputStream(socket.getInputStream());
bufferedReader = new BufferedReader(new InputStreamReader(streamReader, "utf-8"));
String line = null;
while((line = bufferedReader.readLine())!= null){
System.out.println(line);
}
bufferedReader.close();
bufferedWriter.close();
socket.close();

}


public void sendPost() throws IOException{
String path = "/";
String data = URLEncoder.encode("name", "utf-8") + "=" + URLEncoder.encode("张三", "utf-8") + "&" +
URLEncoder.encode("age", "utf-8") + "=" + URLEncoder.encode("32", "utf-8");
// String data = "name=zhigang_jia";
System.out.println(">>>>>>>>>>>>>>>>>>>>>"+data);
OutputStreamWriter streamWriter = new OutputStreamWriter(socket.getOutputStream(), "utf-8");
bufferedWriter = new BufferedWriter(streamWriter);
bufferedWriter.write("POST " + path + " HTTP/1.1\r\n");
bufferedWriter.write("Host: " + this.host + "\r\n");
bufferedWriter.write("Content-Length: " + data.length() + "\r\n");
bufferedWriter.write("Content-Type: application/x-www-form-urlencoded\r\n");
bufferedWriter.write("\r\n");
bufferedWriter.write(data);

bufferedWriter.write("\r\n");
bufferedWriter.flush();

BufferedInputStream streamReader = new BufferedInputStream(socket.getInputStream());
bufferedReader = new BufferedReader(new InputStreamReader(streamReader, "utf-8"));
String line = null;
while((line = bufferedReader.readLine())!= null)
{
System.out.println(line);
}
bufferedReader.close();
bufferedWriter.close();
socket.close();
}

public static void main(String[] args) throws Exception {
/**
* http协议测试
*/
//SocketForHttpTest forHttpTest = new SocketForHttpTest("www.baidu.com", 80);
/**
* https协议测试
*/
SocketForHttpTest forHttpTest = new SocketForHttpTest("www.baidu.com", 443);
try {
forHttpTest.sendGet();
// forHttpTest.sendPost();
} catch (IOException e) {

e.printStackTrace();
}
}

}

标签:原生,http,String,import,connection,new,java,null
From: https://blog.51cto.com/u_11334685/5740089

相关文章

  • Java数组02(内存分析,初始化)
    Java内存分析:数组的三种初始化:静态初始化:int[]a={1,2,3};Man[]mans={newMan(1,1),newMan(2,2)};动态初始化:int[]a=newint[2];a[0]=1;a[1]=2......
  • Java中如何使用Scanner类读取.txt文件呢?
    转自:http://www.java265.com/JavaJingYan/202111/16359892761682.html 文件是日常开发中,使用最多的一种东西,在操作系统中,万物都以文件的形式存在,如:磁盘,网络,内存都都以......
  • 安利一个java开发好用的时间工具类
     在半年的开发中,经历过,自己写操作时间的工具类,到最后规范工具类,然后项目统一,经过了不少的折腾。这段时间接触到这个 hutool 万能工具类,给大家安利一下,这篇文章只介绍其中......
  • Can not find java process. Try to pass <pid> in command line. Please select an ava
    ## 问题描述 下载了arthas 以后 傻傻的直接启动了   java-jararthas-boot.jar  结果就报错这个。 其实arthas 是需要 启动一个服务的。报这个错也就是说......
  • macos+vscode+java
    下载jdkvscode安装插件:ExtensionPackForJavacommand+shift+p:CreateJavaProjectRunJava项目结构。根据需要配置settings.json......
  • JAVA Spring学习笔记------MVC
    SpingMVC首先我没接触过页面开发这里只简单的介绍如何通过spring利用注解的形式搭建一个简单的页面首先我们配置pom文件先加入两个依赖<dependency><gro......
  • java开发框架低代码平台会不会过时?
    其实,框架一词原先是出现下建筑领域的,主要是指在建造房屋前期构建的建筑骨架。后来在编程领域,框架就引申为应用程序的骨架了,在这个基础上,程序员可以随心加入自己想要的元素,......
  • Java多线程(二)线程创建
    三种创建方式1.继承Thread类2.实现Runnable接口3.实现Callable接口(了解) 继承Thread类自定义线程继承Thread类重写run()方法,编写线程执行体创建线程对象,调用start(......
  • Java面试题
    Java基础1.JDK和JRE有什么区别?JDK:JavaDevelopmentKit的简称,Java开发工具包,提供了Java的开发环境和运行环境。JRE:JavaRuntimeEnvironment的简称,Java运行环境......
  • 力扣219(java&python)-存在重复元素 II(简单)
    题目:给你一个整数数组 nums和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,满足nums[i]==nums[j]且abs(i-j)<=k。如果存在,返回true;否则,返回f......