java - http接口请求实现

java - http接口请求实现

java调用http接口的常用的四种实现方式

1、通过JDK网络类Java.net.HttpURLConnection;

2、通过common封装好的HttpClient;

3、通过Apache封装好的CloseableHttpClient;

4、通过SpringBoot-RestTemplate;

1、通过JDK网络类Java.net.HttpURLConnection

jdk自带的java.net包种,java.net.HttpURLConnection 支持对http的get,post请求

post请求:


    public static String postHttpURL(String methodUrl,String parma) throws IOException {
        HttpURLConnection connection = null;
        OutputStream dataout = null;
        BufferedReader reader = null;
        String line = null;
        try {
            URL url = new URL(methodUrl);
            connection = (HttpURLConnection) url.openConnection();// 根据URL生成HttpURLConnection
            connection.setDoOutput(true);// 设置是否向connection输出,因为这个是post请求,参数要放在http正文内,因此需要设为true,默认情况下是false
            connection.setDoInput(true); // 设置是否从connection读入,默认情况下是true;
            connection.setRequestMethod("POST");// 设置请求方式为post,默认GET请求
            connection.setUseCaches(false);// post请求不能使用缓存设为false
            connection.setConnectTimeout(3000);// 连接主机的超时时间
            connection.setReadTimeout(3000);// 从主机读取数据的超时时间
            connection.setInstanceFollowRedirects(true);// 设置该HttpURLConnection实例是否自动执行重定向
            connection.setRequestProperty("connection", "Keep-Alive");// 连接复用
            connection.setRequestProperty("charset", "utf-8");

            connection.setRequestProperty("Content-Type", "application/json");
//            connection.setRequestProperty("Authorization", "Bearer 66cb225f1c3ff0ddfdae31rae2b57488aadfb8b5e7");//安全验证
            connection.connect();// 建立TCP连接,getOutputStream会隐含的进行connect,所以此处可以不要
            
//          dataout = connection.getOutputStream();
            dataout = new DataOutputStream(connection.getOutputStream());// 创建输入输出流,用于往连接里面输出携带的参数
            dataout.write(parma.getBytes());
            dataout.flush();
            dataout.close();

            if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
                reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));// 发送http请求
                StringBuilder result = new StringBuilder();
                // 循环读取流
                while ((line = reader.readLine()) != null) {
                    result.append(line);//
                }
                return result.toString();
            }
        } catch (IOException e) {
            e.printStackTrace();
            throw e;
        } finally {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
                throw e;
            }
            connection.disconnect();
        }
        return "";
    }

总结使用结构:

//1.根据实际url地址创建URL实例对象;
//2.根据第1步URL实例对象创建HttpURLConnection实例对象;
//3.设置第二步获得HttpURLConnection实例对象的参数;(一些常用的请求参数配置)
//4.建立TCP连接,2种方式,对象直接调用connect()方法,或直接调用getOutputStream()方法(getOutputStream会隐含的进行connect)
//5.获取连接的输入流对象,将参数塞到输入流对象中
//6.获取状态码方法时,发送数据再获取接口返回的状态码
//7.获取HttpURLConnection实例对象的输出流,读取返回值数据
//8.关闭连接资源


/*
·HttpURLConnection对象不能直接构造,需要通过URL类中的openConnection()方法来获得。
·HttpURLConnection的connect()函数,实际上只是建立了一个与服务器的TCP连接,并没有实际发送HTTP请求。HTTP请求实际上直到我们获取服务器响应数据(如调用getInputStream()、getResponseCode()等方法)时才正式发送出去。
·对HttpURLConnection对象的配置都需要在connect()方法执行之前完成。
·HttpURLConnection是基于HTTP协议的,其底层通过socket通信实现。如果不设置超时(timeout),在网络异常的情况下,可能会导致程序僵死而不继续往下执行。
·HTTP正文的内容是通过OutputStream流写入的, 向流中写入的数据不会立即发送到网络,而是存在于内存缓冲区中,待流关闭时,根据写入的内容生成HTTP正文。
·调用getInputStream()方法时,返回一个输入流,用于从中读取服务器对于HTTP请求的返回信息。
·我们可以使用HttpURLConnection.connect()方法手动的发送一个HTTP请求,但是如果要获取HTTP响应的时候,请求就会自动的发起,比如我们使用HttpURLConnection.getInputStream()方法的时候,所以完全没有必要调用connect()方法。
*/

2、通过common封装好的HttpClient
3、通过Apache封装好的CloseableHttpClient
4、通过SpringBoot-RestTemplate

参考:

【1】.(14条消息) Java调用HTTP接口及返回json数据讲解_MatChen的博客-CSDN博客

【2】.(14条消息) Java:Http请求(一)post_笨拙的先森-CSDN博客_java post 请求

【3】.HttpURLConnection用法详解 - 章鱼家 - 博客园 (cnblogs.com)

【4】.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用Java实现multipart/form-data接受请求的示例代码: ``` import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.URI; import java.util.List; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; public class MultiPartFormHandler implements HttpHandler { public static void main(String[] args) throws Exception { HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0); server.createContext("/upload", new MultiPartFormHandler()); server.start(); System.out.println("Server started on port 8000"); } @Override public void handle(HttpExchange exchange) throws IOException { String contentType = exchange.getRequestHeaders().getFirst("Content-Type"); if (contentType != null && contentType.startsWith("multipart/form-data")) { InputStream in = exchange.getRequestBody(); MultiPartFormData formData = new MultiPartFormData(in, contentType); List<FormPart> parts = formData.getParts(); for (FormPart part : parts) { if (part.isFile()) { saveFile(part); System.out.println("File saved: " + part.getFileName()); } else { System.out.println(part.getName() + ": " + part.getText()); } } } exchange.sendResponseHeaders(200, 0); exchange.close(); } private void saveFile(FormPart part) throws IOException { File file = new File(part.getFileName()); OutputStream out = new FileOutputStream(file); InputStream in = part.getInputStream(); byte[] buffer = new byte[1024]; int read; while ((read = in.read(buffer)) != -1) { out.write(buffer, 0, read); } out.close(); in.close(); } } class MultiPartFormData { private List<FormPart> parts; public MultiPartFormData(InputStream in, String contentType) throws IOException { String boundary = extractBoundary(contentType); MultipartStream multipartStream = new MultipartStream(in, boundary.getBytes()); boolean nextPart = multipartStream.skipPreamble(); while (nextPart) { String header = multipartStream.readHeaders(); FormPart part = new FormPart(header, multipartStream); parts.add(part); nextPart = multipartStream.readBoundary(); } } private String extractBoundary(String contentType) { String[] elements = contentType.split(";"); for (String element : elements) { element = element.trim(); if (element.startsWith("boundary=")) { return element.substring("boundary=".length()); } } return null; } public List<FormPart> getParts() { return parts; } } class FormPart { private String name; private String fileName; private boolean file; private String text; private InputStream inputStream; public FormPart(String header, InputStream inputStream) throws IOException { String[] elements = header.split(";"); for (String element : elements) { element = element.trim(); if (element.startsWith("name=")) { name = element.substring("name=".length()); } else if (element.startsWith("filename=")) { fileName = element.substring("filename=".length()); file = true; } } if (file) { this.inputStream = inputStream; } else { byte[] buffer = new byte[1024]; int read = inputStream.read(buffer); text = new String(buffer, 0, read); } } public String getName() { return name; } public String getFileName() { return fileName; } public boolean isFile() { return file; } public String getText() { return text; } public InputStream getInputStream() { return inputStream; } } ``` 该示例使用了Java内置的HttpServer和MultipartStream类来处理multipart/form-data请求HttpServer是一个简单的HTTP服务器,MultipartStream是处理multipart/form-data请求的类。在handle方法中,我们首先检查请求的Content-Type是否是multipart/form-data类型。如果是,我们使用MultipartStream类来解析请求并获取各个部分的内容。对于每个部分,我们检查它是文件还是文本,并执行相应的操作。在这个示例中,我们只是打印文本内容或保存文件。 注意:该示例代码需要Java 8或更高版本才能运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值