2014-06-23 1 views
0

Java를 사용하여 REST API를 통해 Jira 문제에 대한 정보를 검색하려고하는데 400 오류가 계속 발생합니다. 내가 누락 된 바보 같은 뭔가가있는 것처럼 느껴진다. 아무도 내가 무엇이 잘못되었는지 알아내는 것을 도울 수 있는가? 편집 : 자바 프로그램에서 Jira에게 사용자 이름/암호를 보내지 않는다는 것을 깨달았지만, 실제로 그 방법을 확신 할 수 없습니다 ... 여기 도움이 될 것입니다!Java를 사용하는 JIRA에 대한 HTTP POST 요청으로 400 개의 잘못된 요청 오류가 발생했습니다. 곱슬 곱슬하게 작동합니다.

import java.io.*; 
import java.net.*; 
import java.util.*; 

public class JiraConnector 
{ 
    public static void main(String[] args) 
    { 
     try { 
      //store necessary query information 
      URL jiraURL = new URL("http://jira.somecompany.com/rest/api/2/search"); 
      String data = "'{\"jql\":\"project = PROJ\"}'"; 

      //establish connection and request properties 
      HttpURLConnection connection = (HttpURLConnection)jiraURL.openConnection(); 
      connection.setRequestMethod("POST"); 
      connection.setRequestProperty("Accept", "*/*"); 
      connection.setRequestProperty("Content-Type", "application/json"); 
      connection.setDoOutput(true); 
      connection.setDoInput(true); 

      connection.connect(); 

      OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream()); 
      wr.write(data.toString()); 
      wr.flush(); 
      wr.close(); 

      Reader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
      for (int c; (c = in.read()) >= 0; System.out.print((char)c)); 

     } catch (MalformedURLException e) { 
      System.err.println("MalformedURLException: " + e.getMessage()); 
     } catch (java.net.UnknownServiceException e) { 
      System.err.println("UnknownServiceException: " + e.getMessage()); 
     } catch (IOException e) { 
      System.err.println("IOException: " + e.getMessage()); 
     }   
    } 
} 

기록은이 컬 명령이 작동을 사용하여 : : 여기가 (회사 이름 편집) 한 코드는

curl -D- -u- user:password -X POST -H "Content-Type: application/json" --data '{"jql:"project=PROF"}' "http://jira.somecompany.com/rest/api/2/search" 

답변

0

헤드 업,이 문제는 권한 부여 (누구든지이 문제가있는 경우)입니다. 완전하게 지워지고 사용자 이름/암호를 보내는 것을 잊었습니다. 기본 인증 헤더를 추가

0

첫번째 일반적인 팁 : TamperData의 애드온으로 예를 파이어 폭스에 대한 사용 on을 사용하면 정규 양식 제출을 추적하고 모든 것을 검사 할 수 있습니다. 귀하의 경우 프록시 모니터가 도움이 될 수 있습니다. 또한 :

curl --trace-ascii ... 

TamperData는 어디가 잘못되는지 보여줍니다.

인코딩 매개 변수가 없으면 현재 플랫폼 인코딩이 사용됩니다. 비 휴대용.

OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream(), 
     StandardCharsets.UTF_8); 
Reader in = new BufferedReader(new InputStreamReader(
     connection.getInputStream(), 
     StandardCharsets.UTF_8)); 
0

게시물 데이터에 작은 따옴표가 추가 된 것처럼 보입니다. 대신이의

:

String data = "'{\"jql\":\"project = PROJ\"}'"; 

이 시도 : 당신이 400 잘못된 요청을 받고에도 불구하고

덧붙여
String data = "{\"jql\":\"project = PROJ\"}"; 

, JIRA는 여전히 오류를 지역화하는 데 도움이 유용한 정보를 제공하고 있습니다. 연결의 getErrorStream 메소드를 사용하여 볼 수 있습니다. 우리는 신속하게 코드에이를 때리는 경우

import java.io.*; 
import java.net.*; 
import java.util.*; 

public class JiraConnector 
{ 
    public static void main(String[] args) 
    { 
     HttpURLConnection connection = null; 
     try { 
      //store necessary query information 
      URL jiraURL = new URL("http://127.0.0.1:8082/rest/api/2/search"); 
      String data = "{\"jql\":\"project = PROJ\"}"; 

      //establish connection and request properties 
      connection = (HttpURLConnection)jiraURL.openConnection(); 
      connection.setRequestMethod("POST"); 
      connection.setRequestProperty("Accept", "*/*"); 
      connection.setRequestProperty("Content-Type", "application/json"); 
      connection.setDoOutput(true); 
      connection.setDoInput(true); 

      connection.connect(); 

      OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream()); 
      wr.write(data.toString()); 
      wr.flush(); 
      wr.close(); 

      Reader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
      for (int c; (c = in.read()) >= 0; System.out.print((char)c)); 

     } catch (MalformedURLException e) { 
      System.err.println("MalformedURLException: " + e.getMessage()); 
     } catch (java.net.UnknownServiceException e) { 
      System.err.println("UnknownServiceException: " + e.getMessage()); 
     } catch (IOException e) { 
      System.err.println("IOException: " + e.getMessage()); 
      if (connection != null) { 
       try { 
        System.out.println(connection.getResponseMessage()); 

        InputStream errorStream = connection.getErrorStream(); 
        if (errorStream != null) { 
         Reader in = new BufferedReader(new InputStreamReader(errorStream)); 
         for (int c; (c = in.read()) >= 0; System.out.print((char)c)); 
        } 
       } 
       catch (IOException e2) { 
       } 
      } 
     }   
    } 
} 

것은 당신이 REST API에 대한 어떤 심각한 일을 할 거라면, 나는 Jersey를 사용하는 대신 자신의 롤하려고보고 추천 할 것입니다.

0

쉽게 충분하다 :

HttpURLConnection connection = (HttpURLConnection)jiraURL.openConnection(); 
String userCredentials = "username:password"; 
String basicAuth = "Basic " + new String(new Base64().encode(userCredentials.getBytes())); 
connection.setRequestProperty ("Authorization", basicAuth); 
관련 문제