마지막희망
30
2021-04-19 08:30:13 작성 2021-04-19 08:32:11 수정됨
3
174

자바 API 호출 질문입니다 제발 도와주세요ㅠㅠ



안녕하세요

자바로 API 호출하고 있는 부분에서 계속 오류가 나서 헤매고있습니다...제발 도와주세요..


호출해야하는 파라미터는


오류는

"ErrMessage":"Enter the parameter value correctly. (grant_type)","ErrCode":9001

입니다.

grant_type을 올바르게 넣으라는데.. 올바르게 넣었습니다.


해당 API 제공 사이트에서는 호출예제는 아래와같이 나와있고,


제가 사용한 코드는 HttpURL을 사용했습니다.



호출하는 방식이 잘못된걸까요? 이쪽은 해본적이 없어서 정말 모르겠어요..

참고로 API 호출을 테스트하는 사이트에서 해봤을때는 정상적으로 grant_type이 들어가더라구요

답변 부탁드립니다 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

마지막희망입니다..





0
  • 답변 3

  • 오로롱이
    1k
    2021-04-19 09:30:23 작성 2021-04-19 09:31:27 수정됨

    client id와 client key 는 없나요?

    auth2 방식이면 발급받은 key 값이 있을 겁니다

    저는 spring security auth2 방식으로 client:securityKey 이 값을 base64변환하여 인증 토큰을 추가하는 방식으로 구현 해서 아래와 같이 개발 했습니다.

    마지막희망 님이 사용하시는 api도 client 관련 부분이 없는지 한 번 살펴보세요

    String clientId = MapUtils.getString(requestMap, "client_id");
    String secret = "";
    Map<String, Object> resultMap = new HashMap<String, Object>();
    List<NameValuePair> formparams = new ArrayList<NameValuePair>();
    for (String clientKey : authServerProperties.getClient().keySet()) {
    	OAuthClientProperties client = authServerProperties.getClient().get(clientKey);
    	if (StringUtils.equals(client.getClientId(), clientId)) {
    		secret = client.getClientSecret();
    		break;
    	}
    }
    formparams.add(new BasicNameValuePair("grant_type", "password"));
    formparams.add(new BasicNameValuePair("scope", MapUtils.getString(requestMap, "scope", "webclient")));
    formparams.add(new BasicNameValuePair("username", MapUtils.getString(requestMap, "username", "")));
    formparams.add(new BasicNameValuePair("password", MapUtils.getString(requestMap, "password", "")));
    String encoding = Base64.getEncoder().encodeToString((clientId + ":" + MapUtils.getString(requestMap, "secret", secret)).getBytes());
    HttpClient client = HttpClientBuilder.create().build();
    HttpPost postRequest = new HttpPost(oauthToken); 
    postRequest.setHeader("Accept", "application/json");
    postRequest.setHeader("Content-Type", "application/x-www-form-urlencoded");
    postRequest.setHeader(HttpHeaders.AUTHORIZATION, "Basic " + encoding);
    try {
    	postRequest.setEntity(new UrlEncodedFormEntity(formparams, "UTF-8"));
    	HttpResponse tokenResponse = client.execute(postRequest);
    	if (tokenResponse.getStatusLine().getStatusCode() == 200) {
    		ResponseHandler<String> handler = new BasicResponseHandler();
    		String body = handler.handleResponse(tokenResponse);
    		ObjectMapper mapper = new ObjectMapper();
    		resultMap = mapper.readValue(body, Map.class);
    		logger.info(body);
    	} else {
    		logger.error("response is error : " + tokenResponse.getStatusLine().getStatusCode());
    	}
    } catch (Exception e){
    	logger.error(e.toString());
    }


  • 공부는 습관
    639
    2021-04-19 10:40:28

    HttpUrlConnection의 setRequestProperty() 메서드는 요청의 Header를 설정합니다. grant_type 포함 아래 값들을 URL 뒤에 쿼리 파라미터로 붙여보세요.

  • 마지막희망
    30
    2021-04-20 13:27:44

    두분 다 말씀하신대로 해봤는데 같은 오류만 나오네요 ㅠㅠ

  • 로그인을 하시면 답변을 등록할 수 있습니다.