利用Java实现调用http请求

以下是利用Java实现调用HTTP请求的完整攻略。

简介

在Java中,我们可以使用HttpURLConnection或者Apache HttpClient来实现HTTP请求。两者区别在于HttpURLConnection是内置于Java SDK中的,而Apache HttpClient是第三方库。以下分别讲解这两种方式的使用方法。

使用HttpURLConnection实现HTTP请求

  1. 创建URL对象,指定请求的URL地址。
URL url = new URL("http://example.com/api");
  1. 使用url.openConnection()方法打开一个连接并得到HttpURLConnection对象。
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
  1. 设置请求方法和请求头信息。
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
  1. 添加请求参数,并发送请求。
connection.setDoOutput(true);
OutputStream os = connection.getOutputStream();
os.write(json.getBytes("UTF-8"));
os.flush();
os.close();
  1. 接收响应。
int status = connection.getResponseCode();

InputStream inputStream;
if (status >= 400) {
    inputStream = connection.getErrorStream();
} else {
    inputStream = connection.getInputStream();
}

BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();

完整代码示例:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpURLConnectionExample {

    private static final String USER_AGENT = "Mozilla/5.0";
    private static final String POST_URL = "http://example.com/api";
    private static final String POST_PARAMS = "{\n" + "\"name\": \"John\",\r\n" + "\"age\": 31,\r\n" + "\"city\": \"New York\"\r\n" + "}";

    public static void main(String[] args) throws Exception {

        URL obj = new URL(POST_URL);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();

        con.setRequestMethod("POST");
        con.setRequestProperty("User-Agent", USER_AGENT);
        con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");

        // For POST only - START
        con.setDoOutput(true);
        OutputStream os = con.getOutputStream();
        os.write(POST_PARAMS.getBytes());
        os.flush();
        os.close();
        // For POST only - END

        int responseCode = con.getResponseCode();
        System.out.println("POST Response Code :: " + responseCode);

        if (responseCode == HttpURLConnection.HTTP_OK) { //success
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    con.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();

            // print result
            System.out.println(response.toString());
        } else {
            System.out.println("POST request not worked");
        }

    }
}

使用Apache HttpClient实现HTTP请求

  1. 导入httpclienthttpcore两个依赖包。
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.14</version>
</dependency>
  1. 创建CloseableHttpClient对象。
CloseableHttpClient httpclient = HttpClients.createDefault();
  1. 创建HttpPost对象,并设置请求头信息。
HttpPost httppost = new HttpPost("http://example.com/api");

httppost.setHeader("Content-type", "application/json; charset=UTF-8");
  1. 添加请求参数,并执行请求。
StringEntity params = new StringEntity(json.toString(),"UTF-8");
httppost.setEntity(params);
HttpResponse response = httpclient.execute(httppost);
  1. 接收响应。
HttpEntity entity = response.getEntity();
String responseString = EntityUtils.toString(entity, "UTF-8");

完整代码示例:

import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;

public class HttpClientExample {

    public static void main(String[] args) throws ClientProtocolException, IOException {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        HttpPost httppost = new HttpPost("http://example.com/api");

        httppost.setHeader("Content-type", "application/json; charset=UTF-8");

        JSONObject json = new JSONObject();
        json.put("name", "John");
        json.put("age", 31);
        json.put("city", "New York");

        StringEntity params = new StringEntity(json.toString(),"UTF-8");
        httppost.setEntity(params);

        HttpResponse response = httpclient.execute(httppost);

        HttpEntity entity = response.getEntity();
        String responseString = EntityUtils.toString(entity, "UTF-8");
        System.out.println(responseString);
    }
}

以上就是利用Java实现调用HTTP请求的完整攻略,两种方式均已详细讲解,并且分别提供了一个完整代码示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用Java实现调用http请求 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • spring boot与spring mvc的区别及功能介绍

    区别: Spring Boot和Spring MVC都是Spring框架的一部分。Spring MVC是一种基于MVC(Model-View-Controller)的Web框架,用于构建Web应用程序,而Spring Boot则是一个用于简化Spring应用程序开发的框架,它可以在开发过程中自动配置和管理一些常见的Spring功能,而无需进行手动配置。因此,…

    Java 2023年5月15日
    00
  • 一文掌握Spring Boot 日志文件

    一文掌握Spring Boot日志文件 在Spring Boot应用程序中,日志文件是非常重要的。它们可以帮助我们诊断和解决问题,同时也可以提供有用的信息,例如应用程序的性能和行为。在本文中,我们将介绍如何配置和使用Spring Boot日志文件,并提供两个示例。 配置Spring Boot日志文件 Spring Boot支持多种日志框架,例如Logback…

    Java 2023年5月15日
    00
  • Java ArrayList集合详解(Java动态数组)

    Java ArrayList集合详解(Java动态数组) 什么是Java ArrayList? 在Java中,ArrayList是一种可以动态增长和缩小的数组序列,它是Array和Vector的非同步版本。它通过继承AbstractList类和实现List接口来提供了大小可以改变的数组的操作。 Java ArrayList的常用方法 1. 添加元素 Arra…

    Java 2023年5月26日
    00
  • java中CopyOnWriteArrayList源码解析

    Java中CopyOnWriteArrayList源码解析 简介 CopyOnWriteArrayList是Java中并发编程常用的数据结构,在多线程的环境下,它可以保证线程安全。它的实现是通过在写入时复制整个数组,从而避免了并发写入数据时的冲突。 CopyOnWriteArrayList继承自AbstractList,同样实现了List接口。它在List的…

    Java 2023年5月26日
    00
  • java加载properties文件的六种方法总结

    以下是讲解“java加载properties文件的六种方法总结”的完整攻略。 一、背景 在Java应用中经常会使用配置文件properties来存储一些固定的配置信息,方便程序在运行时读取。那么在Java中如何加载properties文件呢?本文将总结6种Java加载properties文件的方法。 二、直接使用Java代码加载 直接使用Java代码加载pr…

    Java 2023年5月20日
    00
  • Idea2020.2创建JavaWeb项目(部署Tomcat)方法详解

    Idea2020.2创建JavaWeb项目(部署Tomcat)方法详解 在你使用 IntelliJ IDEA(以下简称 IDEA)创建基于 JavaWeb 技术的 Web 项目时,需要在 IDEA 中设置 Tomcat 服务器,并在项目部署时将其与 Tomcat 进行绑定,以便成功启动和访问。接下来就为你详细讲解使用 Idea2020.2 创建 JavaWe…

    Java 2023年6月2日
    00
  • Spring Security验证流程剖析及自定义验证方法

    接下来我将详细讲解“Spring Security验证流程剖析及自定义验证方法”的完整攻略。 1. Spring Security验证流程剖析 1.1 Spring Security简介 Spring Security是Spring框架的一个子项目,提供了基于Acegi Security(一款强大而且全面的开源安全框架)的安全处理功能,它能够为我们的应用程序…

    Java 2023年5月20日
    00
  • Apache Shiro 使用手册(三) Shiro授权

    Shiro授权是一个非常重要的部分,它定义了谁可以访问应用程序中的哪些资源。本文将介绍如何使用Shiro进行授权。 什么是Shiro授权? Shiro授权是指确定哪些用户可以访问应用程序中的哪些资源。一般来说,授权是在通过身份验证后给定的,如果身份验证已经将用户与特定角色相关联,则可以使用角色来进行授权。此外,还可以使用基于权限的授权方式。 Shiro授权处…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部