利用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日

相关文章

  • 概述Java的struts2框架

    概述Java的struts2框架 简介 Java的struts2框架是一个MVC(Model-View-Controller)模式的Web框架,它借鉴了许多JSP/Servlet和Struts的优点,同时也做了很多改进,达到了更优秀的Web应用开发效果。struts2框架可以很好的帮助开发人员快速搭建Web应用程序,并且可以方便地进行功能扩展和维护。 str…

    Java 2023年5月20日
    00
  • 详解Java字节码编程之非常好用的javassist

    详解Java字节码编程之非常好用的javassist 前言 Java字节码是Java程序在编译过程中生成的中间代码,有些用户可能需要在程序运行时直接修改Java字节码,这就需要用到Java字节码编程技术。Java字节码编程技术使用非常广泛,涉及方面包括AOP、动态代理、字节码加密等。 在Java字节码编程中,有一个非常好用的工具库——javassist,它提…

    Java 2023年5月23日
    00
  • Java编程线程间通信与信号量代码示例

    下面我将为您详细讲解“Java编程线程间通信与信号量代码示例”的攻略。 1. 什么是线程间通信和信号量? 在多线程编程中,线程间通信和信号量都是非常重要的概念。线程间通信是指多个线程之间共享同一块数据,需要明确地进行协作才能保证数据的正确性和完整性。而信号量则是用来控制并发访问的一种方式,通过对资源的访问进行限制,保证多个线程能够有序、安全地访问共享的资源。…

    Java 2023年5月26日
    00
  • Mybatis之@ResultMap,@Results,@Result注解的使用

    Mybatis是一款优秀的ORM框架,它提供了丰富的注解来进行对象和数据库的映射。其中@ResultMap、@Results、@Result三个注解是使用频率较高的几个。下面将详细讲解它们的使用方法及示例。 一、@ResultMap注解的使用 @ResultMap注解用于引用一个已经定义好的resultMap,在查询时用作查询结果集的映射。resultMap…

    Java 2023年5月20日
    00
  • spring*.xml配置文件明文加密的实现

    在Spring框架中,我们可以使用Jasypt(Java Simplified Encryption)库来实现Spring配置文件的明文加密。在本文中,我们将介绍如何使用Jasypt库来实现Spring配置文件的明文加密。 增加依赖 首先,我们需要在pom.xml文件中增加Jasypt的依赖。下面是一个示例: <dependency> <g…

    Java 2023年5月18日
    00
  • Java SpringBoot高级用法详解

    Java Spring Boot 高级用法详解 简介 Java Spring Boot 是一个基于Spring Framework的开源框架,它可以让我们快速开发Web应用程序。在基本使用之外,Spring Boot还有很多高级用法可以帮助开发人员更加灵活地应对各种复杂情况。 编写自定义starter 自定义starter可以让我们将一些通用代码打包成一个独…

    Java 2023年5月15日
    00
  • Java连接postgresql数据库的示例代码

    接下来我来为您详细讲解Java连接PostgreSQL数据库的示例代码的完整攻略。 第一步:引入PostgreSQL的JDBC驱动 在使用Java连接PostgreSQL数据库之前,需要先下载并安装PostgreSQL的JDBC驱动。可以在 PostgreSQL官网 上下载对应的JDBC驱动。 完成下载和安装之后,需要在编码中引入JDBC驱动,代码如下: i…

    Java 2023年5月19日
    00
  • springboot自定义starter启动器的具体使用实践

    Spring Boot自定义Starter启动器的具体使用实践 在本文中,我们将详细讲解如何使用Spring Boot自定义Starter启动器,包括创建Starter、定义自动配置、使用自定义Starter等。 创建Starter 创建自定义Starter的第一步是创建一个Maven项目,并添加以下依赖: <dependency> <gr…

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