当前位置: 首页 > 知识库问答 >
问题:

获取API调用AzureDevOps中的IOException

吕永嘉
2023-03-14

我想调用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();
        }

这是stacktrace

调试[org.apache.http.client.protocol.requestAddCookies]CookieSpec选定:默认调试[org.apache.http.client.protocol.requestAuthCache]Auth缓存未在上下文中设置调试[org.apache.http.impl.conn.poolinghttClientConnectionManager]连接请求:[路由:{s}->http.apache.http.impl.conn.poolinghttClientConnectionManager][保持活动的总路由:0;已分配的路由:0共2;已分配的总路由:0共20]调试: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 socket连接]http-outgoing-0:关闭连接调试[org.apache.http.impl.execchain.mainclientexec]连接放弃调试[org.apache.http.impl.conn.poolinghttpclientConnectionManager]连接释放:[ID:0][route:{s}->https://dev.azure.com:443][保持活动的总数:0;已分配的路由:0共2;已分配的总数:0共20]信息[org.apache.http.impl.execchain.retryexec]I/O异常(java.net.socketException)在处理对{s}的请求时捕获不允许http.impl.execchain.retryexec]操作

共有1个答案

章青青
2023-03-14

您可以参考这个线程来用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();
        }

    }

}
 类似资料:
  • 问题内容: 遵循Restangular的文档,并包括以下示例: 我正在为angel.co做同样的事情 并不断出错 有什么办法吗? 问题答案: 服务器(api.angel.co)没有响应Access-Control标头,这导致此错误。 将XHR请求发送到与原始域不同的域时,Web浏览器正在检查服务是否允许这样做。在您的情况下,api.angel.co将需要在响应中包含标头(不是)。 假设您不能更改a

  • 我使用贝宝快递结账与BigCommerce与沙箱帐户。通过BigCommerce API,只提供了一个字段,该字段也通过http://www.sandbox.paypal.com界面作为“Details”下的“唯一事务ID”列出: 如果是,需要哪个API调用来获取电子邮件? 谢了。

  • 本文向大家介绍详解如何调用zabbix API获取主机,包括了详解如何调用zabbix API获取主机的使用技巧和注意事项,需要的朋友参考一下 前言 zabbix 作为企业级的系统和网络监控方案,对于中小型公司来说基本可以很好的满足对机器的监控需求,因为其部署方便,操作简单深受现在各个互联网公司喜爱,所以现在基本的互联网公司监控用zabbix的非常多,当你安装好zabbix服务端 后,如果启动自动

  • 我是的新手,并编写了以下代码以从组中获取参数。 跳过:testMethodA java.lang.NullPoInterException(位于org.testng.internal.methodInvocationHelper.InvokedDataProvider(MethodInvocationHelper.java:151)(位于org.testng.internal.parameters

  • 问题内容: 我想获取方法的调用者类,即 在方法栏中,我需要获取类名称,然后找到了该方法: 但是,即使是,当我尝试调用它时,Eclipse 也会说: 访问限制:由于必需的库C:\ Program Files \ Java \ jre7 \ lib \ rt.jar的限制,无法访问类型为Reflection的方法getCallerClass() 还有其他选择吗? 问题答案: 你可以生成堆栈跟踪并使用S

  • 功能介绍 此API为硬件厂商提供通过目睹账号密码直接获取临时token的特殊API,请勿滥用 此API作用为 如果当前账号未生成token,将会生成一个token。 如果当前账号为专业版及以上用户,并且之前调用当前接口获取过临时token,当临时token过期时,再次调用当前接口时,会返回一个token。 专业版本以下用户我们将不再返回token提供使用。 注意: 通过当前接口返回的token长期