Java HttpClient 发送请求参数乱码问题解决方法

在使用 Java HttpClient 发送请求时,经常会遇到参数乱码的问题。这通常是由于本地运行和测试环境使用的字符编码不一致导致的。本地运行时,可能使用的是默认的字符编码(如UTF-8),而测试环境可能使用的是其他字符编码(如ISO-8859-1)。

问题原因

参数乱码的原因可能是因为本地运行和测试环境使用的字符编码不同。

解决方法

在构建 URIBuilder 时,明确指定使用的字符编码,例如:

URIBuilder uriBuilder = new URIBuilder(System_Url.getOssDomain() + "/push/pushMessage.html");
uriBuilder.setParameter("pushFrequency", "update");
uriBuilder.setParameter("categoryId", management.getId().toString());
uriBuilder.setParameter("categoryName", management.getName());
uriBuilder.setParameter("articleTitle", sysLaws.getLawsName());

// 明确指定使用的字符编码
uriBuilder.setCharset(StandardCharsets.UTF_8);

// 创建 HttpGet 对象,设置 url 访问地址
HttpGet httpGet = new HttpGet(uriBuilder.build());

这样可以确保在测试环境中使用的字符编码与本地运行时一致,避免参数乱码的问题。

代码示例

// 创建 HttpClient 对象
CloseableHttpClient httpClient = HttpClients.createDefault();

// 创建 URIBuilder
URIBuilder uriBuilder = new URIBuilder(System_Url.getOssDomain() + "/push/pushMessage.html");

// 设置参数
uriBuilder.setParameter("pushFrequency", "update");
uriBuilder.setParameter("categoryId", management.getId().toString());
uriBuilder.setParameter("categoryName", management.getName());
uriBuilder.setParameter("articleTitle", sysLaws.getLawsName());

// 明确指定使用的字符编码
uriBuilder.setCharset(StandardCharsets.UTF_8);

// 创建 HttpGet 对象,设置 url 访问地址
HttpGet httpGet = new HttpGet(uriBuilder.build());

CloseableHttpResponse response = null;

try {
    // 使用 HttpClient 发起请求,获取 response
    response = httpClient.execute(httpGet);
    // 解析响应
    if (response.getStatusLine().getStatusCode() == 200) {
        String content = EntityUtils.toString(response.getEntity(), "utf8");
    }
} catch (IOException e) {
    e.printStackTrace();
} finally {
    // 关闭 response
    try {
        response.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        httpClient.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

通过以上方法,您就可以有效地解决 Java HttpClient 发送请求时参数乱码的问题。

Java HttpClient 发送请求参数乱码问题解决方法

原文地址: https://www.cveoy.top/t/topic/pnDe 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录