HttpClient POST请求第三方接口(多参数传参)

本文介绍如何使用Apache HttpClient库进行POST请求,通过一个实际的代码示例演示了如何设置请求头、构建请求参数并发送请求。示例中包含了错误处理逻辑,适合初学者学习。

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

HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

 

在开发中经常遇到和第三方公司接口对接,需要拿到对方提供的数据或者是给对方提供,下面给大家提供一个自己写的demo,本地测试有效,利用post请求传参访问 ,希望可以帮到你学习

package test;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import com.alibaba.fastjson.JSONObject;

public class InterfaceRequest {

    public static void main(String[] args) {
        String url = "https://www.jianliyisheng.com/api/site/getprovincedata";
        HttpClient client = HttpClients.createDefault();
        //默认post请求
        HttpPost post = new HttpPost(url);
        //拼接多参数
        JSONObject json = new JSONObject();
        json.put("uid", "79");
        json.put("key", "d86e33fb43036df9f9c29ff8085ac653");
        json.put("timestamp", "1562296283");
        json.put("typekey", "wshh");

        try {
            post.addHeader("Content-type", "application/json; charset=utf-8");
            post.setHeader("Accept", "application/json");
            post.setEntity(new StringEntity(json.toString(), Charset.forName("utf-8")));
            HttpResponse httpResponse = client.execute(post);

            HttpEntity entity = httpResponse.getEntity();
            System.err.println("状态:" + httpResponse.getStatusLine());
            System.err.println("参数:" + EntityUtils.toString(entity));
        } catch (UnsupportedEncodingException e1) {
            e1.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

<think>好的,用户想了解如何在Java中通过HTTP请求第三方接口传递Body参数。首先,我需要回忆一下Java中常用的HTTP客户端库,比如HttpURLConnection、HttpClient以及第三方库如OkHttp或AsyncHttpClient。根据用户提供的引用,特别是引用[1]和[2],他们提到使用POST方法发送请求参数,以及如何处理请求和响应。 首先,确定用户需要具体的示例代码,所以应该提供不同方法的示例。可能要考虑使用原生的HttpURLConnection和较新的HttpClient(Java 11+),因为这两个是标准库的一部分,不需要额外依赖。同时,用户提到的引用[3]中提到了AsyncHttpClient,这也是一个选项,但可能需要添加依赖。 接下来,需要确保示例代码正确展示如何设置请求体参数。例如,对于POST请求,需要设置Content-Type头,比如application/json或application/x-www-form-urlencoded,并将参数写入输出流。同时,处理响应和异常也是关键步骤,需要包含在示例中。 还要注意用户可能对GET和POST的区别有疑问,但问题明确提到Body参数,所以应专注于POST方法,因为GET通常不携带请求体。需要指出这一点,避免混淆。 另外,引用[2]提到了使用HttpClient或HttpURLConnection,所以需要分别展示这两种方法的示例。可能还需要提到常见的第三方库,如OkHttp,但如果没有具体引用,可能先以标准库为主。不过用户引用[3]中的AsyncHttpClient,可以提供一个示例,但需要注明依赖。 在编写代码示例时,要确保语法正确,比如正确关闭资源,使用try-with-resources处理自动关闭,以及正确处理异常。例如,HttpURLConnection需要设置setDoOutput(true),并获取输出流写入数据。对于HttpClient,需要构建HttpRequest,并发送BodyPublishers.ofString处理请求体。 还需要提醒用户注意设置正确的Content-Type头,否则服务器可能无法正确解析参数。例如,发送JSON数据时需要设置Content-Type为application/json,而表单数据则是application/x-www-form-urlencoded。 最后,可能需要总结不同方法的优缺点,比如HttpURLConnection较为底层,HttpClient更现代高效,第三方库如AsyncHttpClient提供异步支持等。这样用户可以根据项目需求选择合适的工具。 现在,整理这些思路,分步骤给出示例,并确保每个示例的完整性和正确性。同时,在回答末尾添加相关问题,帮助用户进一步学习,如处理不同数据格式、文件上传或异常处理等。</think>在Java中向第三方HTTP接口传递Body参数,主要通过POST/PUT等方法设置请求体内容。以下是几种常见实现方式及示例: ### 一、使用原生HttpURLConnection实现 ```java import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; public class PostExample { public static void main(String[] args) throws Exception { URL url = new URL("https://api.example.com/endpoint"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 设置请求方法为POST conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setRequestProperty("Content-Type", "application/json; utf-8"); // 构建JSON格式请求体 String jsonBody = "{\"name\":\"张三\",\"age\":25}"; try(OutputStream os = conn.getOutputStream()) { byte[] input = jsonBody.getBytes("utf-8"); os.write(input, 0, input.length); } // 处理响应(示例仅打印状态码) System.out.println("Response Code: " + conn.getResponseCode()); } } ``` ### 二、使用HttpClient(Java 11+)实现 ```java import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; public class HttpClientExample { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com/endpoint")) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString("{\"key\":\"value\"}")) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ### 三、使用AsyncHttpClient实现(需添加依赖) 需在pom.xml中添加: ```xml <dependency> <groupId>org.asynchttpclient</groupId> <artifactId>async-http-client</artifactId> <version>2.12.3</version> </dependency> ``` 示例代码: ```java import org.asynchttpclient.*; public class AsyncExample { public static void main(String[] args) { AsyncHttpClient client = Dsl.asyncHttpClient(); client.preparePost("https://api.example.com/endpoint") .setHeader("Content-Type","application/json") .setBody("{\"param1\":\"data\"}") .execute() .toCompletableFuture() .thenAccept(response -> { System.out.println(response.getResponseBody()); }) .join(); client.close(); } } ``` **关键点说明:** 1. 必须设置`Content-Type`头标识参数格式,常见类型: - `application/json`:JSON格式参数 - `application/x-www-form-urlencoded`:表单格式参数 2. POST方法必须设置`setDoOutput(true)`(HttpURLConnection) 3. 推荐使用`try-with-resources`自动关闭连接 4. 异步客户端更适合高并发场景[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭优秀的笔记

你的支持就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值