You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Java HttpClient调用JIRA REST API遇连接拒绝错误求助

排查Java调用JIRA REST API时的Connection Refused问题

嘿,我来帮你搞定这个连接拒绝的报错!java.net.ConnectException: Connection refused: connect本质上是你的程序没法和目标JIRA服务器建立连接,咱们从网络和代码两方面一步步排查:

一、先确认网络层面的可达性

这是最常见的原因,先排除环境问题:

  • 手动用浏览器访问https://jira.mycomp.com/rest/api/latest/issue,看看能不能打开。如果打不开,要么是JIRA服务器挂了,要么是你的机器被公司防火墙/内网规则挡住了,或者需要走代理才能访问。
  • 也可以用curl命令测试:curl -u uname:pwd https://jira.mycomp.com/rest/api/latest/issue,看有没有正常响应。

二、检查代码里的问题

你的代码片段有几个可以优化和补全的地方,可能会影响连接:

1. 替换不推荐的BASE64编码器

你用的sun.misc.BASE64Encoder是JDK内部的非公开API,高版本JDK可能会禁用它,建议换成标准的java.util.Base64:

import java.util.Base64;
import java.nio.charset.StandardCharsets;

// ...
String userpassword = "uname" + ":" + "pwd";
String encodedAuthorization = Base64.getEncoder().encodeToString(userpassword.getBytes(StandardCharsets.UTF_8));

2. 补全HTTP请求的必要配置

你的代码没写完,记得要设置请求方法、请求头这些关键配置,比如创建Issue的POST请求:

conn.setRequestMethod("POST"); // 查数据用GET,创建用POST
conn.setRequestProperty("Authorization", "Basic " + encodedAuthorization);
conn.setRequestProperty("Content-Type", "application/json");

3. 处理HTTPS证书问题(如果是自签名证书)

如果公司JIRA用的是自签名SSL证书,JVM默认会不信任它,导致连接失败。你可以:

  • 把证书导入到JVM的信任库(cacerts文件);
  • 或者自定义TrustManager跳过证书验证(仅测试环境用,生产环境不推荐):
// 跳过证书验证的示例(测试用)
TrustManager[] trustAllCerts = new TrustManager[]{
    new X509TrustManager() {
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }
        public void checkClientTrusted(
            java.security.cert.X509Certificate[] certs, String authType) {
        }
        public void checkServerTrusted(
            java.security.cert.X509Certificate[] certs, String authType) {
        }
    }
};

SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

// 跳过主机名验证
HostnameVerifier allHostsValid = (hostname, session) -> true;
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);

三、如果需要代理访问

如果公司网络必须走代理才能连JIRA,记得给连接设置代理:

import java.net.Proxy;
import java.net.InetSocketAddress;

// ...
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxy.mycomp.com", 8080)); // 替换成你的代理地址和端口
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(proxy);

完整代码示例

这里给你补全一个创建JIRA Issue的完整示例,你可以参考:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpsURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class JiraApiClient {
    public static void main(String[] args) {
        try {
            URL url = new URL("https://jira.mycomp.com/rest/api/latest/issue");
            HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();

            // 配置代理(如果需要就打开注释)
            // Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxy.mycomp.com", 8080));
            // HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(proxy);

            // 认证信息
            String username = "uname";
            String password = "pwd";
            String auth = username + ":" + password;
            String encodedAuth = Base64.getEncoder().encodeToString(auth.getBytes(StandardCharsets.UTF_8));

            // 请求配置
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Authorization", "Basic " + encodedAuth);
            conn.setRequestProperty("Content-Type", "application/json");

            // 构造请求体(根据JIRA的字段调整)
            String jsonPayload = "{\"fields\":{" +
                    "\"project\":{\"key\":\"YOUR_PROJECT_KEY\"}," +
                    "\"summary\":\"Test Issue from API\"," +
                    "\"description\":\"Created via Java HttpsURLConnection\"," +
                    "\"issuetype\":{\"name\":\"Bug\"}" +
                    "}}";

            // 发送请求体
            try (OutputStream os = conn.getOutputStream()) {
                byte[] input = jsonPayload.getBytes(StandardCharsets.UTF_8);
                os.write(input, 0, input.length);
            }

            // 获取响应
            int responseCode = conn.getResponseCode();
            System.out.println("Response Code: " + responseCode);

            try (BufferedReader br = new BufferedReader(
                    new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) {
                StringBuilder response = new StringBuilder();
                String responseLine;
                while ((responseLine = br.readLine()) != null) {
                    response.append(responseLine.trim());
                }
                System.out.println("Response Body: " + response);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

内容的提问来源于stack exchange,提问作者Prabhu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:00:43