Java get API调用AzureDevOps中的IOException

Java get API调用AzureDevOps中的IOException,java,oauth-2.0,azure-devops,apache-httpclient-4.x,Java,Oauth 2.0,Azure Devops,Apache Httpclient 4.x,我想打电话给AZDO,但当我尝试时,这会返回一个IOException,我不明白为什么 String testSuiteURI = "https://dev.azure.com/" +organization +"/" + project + "/_apis/testplan/Plans/" + planId + "?api-version=6.0-preview.1"; HttpGet httpGe

我想打电话给AZDO,但当我尝试时,这会返回一个IOException,我不明白为什么

String testSuiteURI = "https://dev.azure.com/" +organization +"/" + project + "/_apis/testplan/Plans/" + planId + "?api-version=6.0-preview.1";
        HttpGet httpGet = new HttpGet(testSuiteURI);
        try {
            CloseableHttpClient httpClient = HttpClients.custom().setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE).setSSLContext(getSslContext()).build();
            httpGet.setHeader(HttpHeaders.CONTENT_TYPE,"application/json");
            httpGet.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken);
            //instantiate the response handler
            ResponseHandler<String> responseHandler = new MyResponseHandler();
            String response = httpClient.execute(httpGet, responseHandler);
            httpClient.close();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        }
String testSuiteURI=”https://dev.azure.com/“+organization+”/“+project+”/_api/testplan/Plans/“+planId+”?api版本=6.0-preview.1”;
HttpGet HttpGet=新的HttpGet(testSuiteURI);
试一试{
CloseableHttpClient httpClient=HttpClients.custom().setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE).setSSLContext(getSslContext()).build();
setHeader(HttpHeaders.CONTENT_类型,“application/json”);
setHeader(HttpHeaders.AUTHORIZATION,“Bearer”+accessToken);
//实例化响应处理程序
ResponseHandler ResponseHandler=新的MyResponseHandler();
String response=httpClient.execute(httpGet,responseHandler);
httpClient.close();
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}捕获(无算法异常){
e、 printStackTrace();
}捕获(密钥管理异常e){
e、 printStackTrace();
}
这是stacktrace

DEBUG[org.apache.http.client.protocol.RequestAddCookies]CookieSpec selected:default 调试[org.apache.http.client.protocol.RequestAuthCache]未在上下文中设置身份验证缓存 调试[org.apache.http.impl.conn.poollighttpclientconnectionmanager]连接请求:[路由:{s}->https://dev.azure.com:443][保持活动状态的总数:0;分配的路由:0,共2条;分配的总数:0,共20条] 调试[org.apache.http.impl.conn.PoolighttpClientConnectionManager]租用的连接:[id:0][路由:{s}->https://dev.azure.com:443][保持活动状态的总数:0;分配的路由:1/2;分配的总数:1/20] 调试[org.apache.http.impl.execchain.MainClientExec]打开连接{s}->https://dev.azure.com:443 调试[org.apache.http.impl.conn.DefaultHttpClientConnectionOperator]连接到dev.azure.com/13.107.42.20:443 调试[org.apache.http.conn.ssl.SSLConnectionSocketFactory]将套接字连接到dev.azure.com/13.107.42.20:443,超时0 调试[org.apache.http.impl.conn.DefaultManagedHttpClient连接]http-outgoing-0:关闭连接 已放弃调试[org.apache.http.impl.execchain.MainClientExec]连接 调试[org.apache.http.impl.conn.PoolighttpClientConnectionManager]已释放连接:[id:0][路由:{s}->https://dev.azure.com:443][保持活动状态的总数:0;分配的路由:0,共2条;分配的总数:0,共20条] INFO[org.apache.http.impl.execchain.RetryExec]处理对{s}的请求时捕获的I/O异常(java.net.SocketException)->https://dev.azure.com:443: 不允许操作 不允许调试[org.apache.http.impl.execchain.RetryExec]操作

您可以参考使用java调用azure devops REST api。以下代码使用devops REST api获取工作项:

package com.restapi.sample;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;
import java.util.Scanner;

import org.apache.commons.codec.binary.Base64;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

public class ResApiMain {

    static String ServiceUrl = "https://dev.azure.com/<your_org>/";
    static String TeamProjectName = "your_team_project_name";
    static String UrlEndGetWorkItemById = "/_apis/wit/workitems/";
    static Integer WorkItemId = 1208;
    static String PAT = "your_pat";

    public static void main(String[] args) {

        try {

            String AuthStr = ":" + PAT;
            Base64 base64 = new Base64();

            String encodedPAT = new String(base64.encode(AuthStr.getBytes()));

            URL url = new URL(ServiceUrl + TeamProjectName + UrlEndGetWorkItemById + WorkItemId.toString());
            HttpURLConnection con = (HttpURLConnection) url.openConnection();

            con.setRequestProperty("Authorization", "Basic " + encodedPAT);
            System.out.println("URL - " + url.toString());
            System.out.println("PAT - " + encodedPAT);
            con.setRequestMethod("GET");

            int status = con.getResponseCode();

            if (status == 200){
                String responseBody;
                try (Scanner scanner = new Scanner(con.getInputStream())) {
                    responseBody = scanner.useDelimiter("\\A").next();
                    System.out.println(responseBody);
                }

                try {
                    Object obj = new JSONParser().parse(responseBody);
                    JSONObject jo = (JSONObject) obj;

                    String WIID = (String) jo.get("id").toString();
                    Map<String, String> fields = (Map<String, String>) jo.get("fields");
                    System.out.println("WorkItemId - " + WIID);
                    System.out.println("WorkItemTitle - " + fields.get("System.Title"));
                } catch (ParseException e) {
                // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }           

            con.disconnect();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}
package com.restapi.sample;
导入java.io.IOException;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入java.util.Map;
导入java.util.Scanner;
导入org.apache.commons.codec.binary.Base64;
导入org.json.simple.JSONObject;
导入org.json.simple.parser.JSONParser;
导入org.json.simple.parser.ParseException;
公务舱{
静态字符串ServiceUrl=”https://dev.azure.com//";
静态字符串TeamProjectName=“您的团队项目名称”;
静态字符串UrlEndGetWorkItemById=“/\u API/wit/workitems/”;
静态整数WorkItemId=1208;
静态字符串PAT=“your_PAT”;
公共静态void main(字符串[]args){
试一试{
字符串AuthStr=“:”+PAT;
Base64 Base64=新的Base64();
String encodedPAT=新字符串(base64.encode(AuthStr.getBytes());
URL URL=新URL(ServiceUrl+TeamProjectName+UrlEndGetWorkItemById+WorkItemId.toString());
HttpURLConnection con=(HttpURLConnection)url.openConnection();
con.setRequestProperty(“授权”、“基本”+encodedPAT);
System.out.println(“URL-”+URL.toString());
System.out.println(“PAT-”+encodedPAT);
con.setRequestMethod(“GET”);
int status=con.getResponseCode();
如果(状态==200){
字符串响应体;
尝试(Scanner Scanner=new Scanner(con.getInputStream())){
responseBody=scanner.useDelimiter(“\\A”).next();
系统输出打印LN(响应库);
}
试一试{
Object obj=new JSONParser().parse(responseBody);
JSONObject jo=(JSONObject)obj;
字符串WIID=(String)jo.get(“id”).toString();
映射字段=(Map)jo.get(“字段”);
System.out.println(“工作项ID-”+WIID);
System.out.println(“WorkItemTitle-”+fields.get(“System.Title”);
}捕获(解析异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}           
con.disconnect();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}