Java get API调用AzureDevOps中的IOException
我想打电话给AZDO,但当我尝试时,这会返回一个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
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();
}
}
}