내일배움캠프 78일차 TIL - 웹 통신 오류

권태하·2024년 8월 6일
0
post-thumbnail

특강에서 나왔던 내용대로 NexonApi를 사용해 정보를 추출할 스크립트를 작성했다.

근데 디버그 로그에 원했던 결과값이 출력이 안됬다.

{"error":{"name":"OPENAPI00004","message":"Please input valid parameter"}}

OPENAPI0004란 에러 코드를 통해 NEXONAPI사이트 API사용하기를 보면

https://openapi.nexon.com/ko/guide/request-api/

API 사용 중 발생한 에러의 경우 코드만 보고 에러 사유를 판단할 수 있게 정리되어 있다.

또한 API 테스트를 하는 방법도 정리되어 있다.

어찌됬든, 디버그에 출력된 에러 메세지와 마찬가지로 파라미터 값이 지금 문제가 있다는 것인데

내가 원했던 정보의

    IEnumerator GetOUID(string nickname)
    {
        // Get으로 요청
        string path = url + "tfd/v1/id?user_name=" + nickname;
        UnityWebRequest www = UnityWebRequest.Get(path);

        // 헤더 추가
        www.SetRequestHeader("x-nxopen-api-key", apikey);

        // 웹 요청이 올 때까지 대기
        yield return www.SendWebRequest();

        // 결과 확인
        string result = www.downloadHandler.text;

        Debug.Log(result);
    }

이런 식의 코드를 통해 보냈었다.

계정명을 통해 검색에 필요한 OUID를 받아오는 요청이었는데, 다시 둘러봐도 파라미터에 어디가 부족했는진 모르겠다.

  1. api값이 잘못 되었나?
  • 사이트에 들어가서 직접 긁어서 복사하는게 아니라 복사 버튼을 통해서 한 것이라 오류 날리가 없다. 혹시 몰라 직접 긁어서도 해 봤지만 코드가 달라진 건 없었다.
  1. 검색 아이디가 잘못 되었나?
  • 다른 사이트를 통해 검색이 되는 아이디를 그대로 복사해서 사용해봤는데 여전히 문제는 해결되지 않았다.
  1. path 확인

뒷 부분은 한글이나 문자가 변환되는 형식이니까 약간 다르긴 한데, 영향이 있을까?


apikey나 apipath가 잘못되었다면 위와같은 다른 에러코드가 나왔을 것 같은데 알 수가 없다.

테스트 id를 사이트에서 입력했을 때는 정상적인 반환값이 나왔기 때문에 문제가 있었을 것 같지는 않다.

  1. 메이플로 테스트
    IEnumerator GetOUID(string nickname)
    {
        // Get으로 요청
        string path = url + "maplestory/v1/id?character_name=" + nickname;
        UnityWebRequest www = UnityWebRequest.Get(path);

        Debug.Log(path);

        // 헤더 추가
        www.SetRequestHeader("x-nxopen-api-key", apikey);

        // 웹 요청이 올 때까지 대기
        yield return www.SendWebRequest();

        // 결과 들어오는 곳 www.downloadHandler.text
        string result = www.downloadHandler.text;

        Debug.Log(result);
    }

위와 동일한 코드에서 메이플 스토리에서 입력해보니 정상적인 반환값이 돌아왔다.

추측할 수 있는 건 이제 nickname 부분이 잘못 됬을 가능성??

  1. #이라는 문자가 문제?
    #문자는 URL에서 특수 문자로 간주되기 때문에, 인코딩을 통해서 변환을 해봤다.

예시 리퀘스트를 보니 ㅁㅁㅁ%23ㅁㅁㅁ 이런 식으로 변환이 되서 요청됬기 때문이다.

이럴 위해 UnityWebRequest.EscapeURL 메서드를 통해 문자열을 URL 인코딩 된 형식으로 변환해 보았다.

    string encodedNickname = UnityWebRequest.EscapeURL(nickname);
    string path = url + "tfd/v1/id?user_name=" + encodedNickname;
    UnityWebRequest www = UnityWebRequest.Get(path);

반환된 값은 에러코드 OPENAPI00006

실패다.는 성공이었다.

api키가 메이플과 달랐는데, 굉장히 복잡한 api구조에서 눈대중으로 같은건가? 싶어서 안바꾸고 했더니 발생한 문제였다!

드디어 정상적인 시작 구조를 만들었으니 이제부터 다양하게 정보를 요청하고 받아오게 해보자.

profile
스터디 로그

0개의 댓글