, , ,

사실 대부분의 'OAuth'인증은 웹을 통해서만 하므로 애플리케이션이던 웹이던 처리에는 크게 차이가 없다는 게....

(제가 모르는 건인지 자료를 못 찾은 건지 ㅡ.-;;)

 

어찌 됐건 C#애플리케이션을 통해 네이버에서 'OAuth'로그인을 하도록 하겠습니다.

로그인이 잘되었는지 확인하기 위해 접근 토큰(Access Token, 액세스 토큰)을 발급받아 블로그의 카테고리를 조회해 보도록 하겠습니다.

 

0. 네이버 'OAuth'로그인 절차

애플리케이션에서 네이버 'OAuth'인증을 하기 위해서는 웹 브라우저를 사용할 수 있는 컨트롤이 필요합니다.

로그인 인터페이스가 웹으로만 되어 있으므로 웹 브라우저 컨트롤(C#에서는 'WebBrowser' 컨트롤)을 이용하여 사용자에게 네이버 로그인을 유도하고 로그인 결과를 'GET'나 'JSON'으로 받아 사용합니다.

 

문제는 이렇게 인증받은 코드(code)는 로그인 한 것이 맞지만 이 코드를 이용하기 위해서는 접근 토큰(Access Token)을 따로 발급받아야 합니다.

 

그렇므로 이 글은 원래 인증 코드만 받으면서 마무리할 생각이엇지만 인증코드의 유효성을 확인하기 위해 접근 토큰까지 발급받아 블로그의 카테고리를 조회하는 것까지 다루겠습니다.

 

1. 네이버에 프로젝트 등록하기

네이버의 'OAuth'인증을 사용하려면 네이버 개발자 센터에 프로젝트(애플리케이션)이 등록되어 있어야 합니다.

 

 

1)

네이버 개발자센터(http://developer.naver.com/) > 오픈API > 네이버 로그인

으로 들어가 '네아로(네이버 아이디 로그인 ) 개발자'로 이동합니다.

 

 

 

2)

내 애플리케이션 > 새 애플리케이션 등록

을 선택합니다.

 

 

 

3)

애플리케이션의 정보를 입력합니다.

애플리케이션 이름 : 로그인할 때 화면에 표시되는 이름입니다. 한글도 가능합니다.

카테고리 : 애플리케이션의 용도를 설정합니다.

 

서비스 환경 : 우리는 'Windows App'를 선택해 줍니다.

뭐...다른걸 선택해서 생성해도 크게 차이가 없습니다.

입력할 내용이 좀 다르긴 한데 결과적으로는 다 똑같습니다.

단지 'Web'과 'Windows App'의 경우 '다운로드 URL'과 'Callback URL'의 호스트(Host)가 다른 경우 네이버의 로그인 API사용 허가가 안 나거나 로그인 허가는 나는데 액세스 토큰은 허가가 안 나는 경우가 있습니다.

 

다운로드 URL : 프로그램을 다운로드할 수 있는 URL입니다.(서비스 하는 웹페이지의  URL을 입력하셔도 됩니다.)

Callback URL : 로그인 허가가 난 경우 콜백받을 URL입니다.

'Windows App'인경우 웹서버가 없으므로 이곳에서 문제가 생길 수 있습니다.

이럴 때는 자신의 블로그나 홈페이지 같이 외부에서 접속가능한 주소를 적어주시면 됩니다.

이것을 웹 브라우저컨트롤에서 읽어들여 작업하는 것이 가능합니다.

 

모든 항목을 입력하셨으면 약관에 동의한 후 확인을 누릅니다.

 

 

2. 클라이언트 키 확인하기

내 애플리케이션 > [생성한 애플리케이션 이름]

을 선택하시면 등록한 애플리케이션의 정보를 확인할 수 있습니다.

여기서 클라이언트 아이디(Client ID)와 클라이언트 시크릿(Client Secret)을 확인할 수 있습니다.

이 키를 이용하여 애플리케이션에서 로그인 요청을 할 수 있습니다.

 

 

 

3. C#에서 'OAuth'인증 하기

.Net의 웹 브라우저(WebBrowser) 컨트롤을 이용하여 네이버 'OAuth'로그인 폼을 호출하고 로그인 결과를 콜백URL로 받게 됩니다.('GET'방식으로 받게 됨)

 

3-1. UI 구성하기

결국 로그인을 하려면 네이버의 웹페이지에 접속해야 하므로 UI에 웹브라우저 컨트롤이 있어야 합니다.

 

아래 디자이너에서 'Login'버튼을 누르면 웹브우저 컨트롤에 로그인 페이지를 표시해주고 리턴받은 값을 'Authentication Result'에 받습니다.

 

 

 

3-2. 요청 URL 만들기

네이버에서 제공하는 로그인 인증용 url에 'GET' 방식으로 쿼리를 붙여 요청용 URL을 완성해야 합니다.

(참고 : 네아로 개발자 센터 - 네이버 아이디로 로그인 API 명세)

 

API 명세에 '1. 네이버 아이디로 로그인 인증 요청'을 보면

요청 URL : https://nid.naver.com/oauth2.0/authorize

파라미터 : 'response_type', 'client_id', 'redirect_uri', 'state'

로 되어 있습니다.

 

아래와 같은 방법으로 인증용 URL을 완성해 봅시다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
string ClientID = [1번에서 등록할때 받은 클라이언트 아이디];
string ClientSecret = [1번에서 등록할때 받은 클라이언트 시크릿];
string RedirectURL = [1번에서 등록할때 넣은 콜백URL];
 
//확인용 키 생성
string State = (new Random()).Next().ToString();
 
//인증요청용 전체 URL(쿼리 포함) 생성
NameValueCollection listAuthURL_QueryString
    = HttpUtility.ParseQueryString(string.Empty);
listAuthURL_QueryString["response_type"= "code";
listAuthURL_QueryString["client_id"= ClientID;
listAuthURL_QueryString["redirect_uri"= RedirectURL;
listAuthURL_QueryString["state"= State;
 
string AuthURL = "https://nid.naver.com/oauth2.0/authorize?"
    + listAuthURL_QueryString.ToString();
 
cs

 

'NameValueCollection'를 'HttpUtility.ParseQueryString()'으로 인스턴스를 만들면 'GET'방식을 사용할 때 필요한 쿼리스트링을 컬렉션으로 만들어 관리할 수 있습니다.

 

위 코드를 통해 완성된 URL의 예는 다음과 같습니다.

예> https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=[1번에서 등록할 때 받은 클라이언트 아이디]&redirect_uri=[1번에서 등록할때 넣은 콜백URL]&state=1162353973

 

3-3. 로그인 하기

이제 '3-2.'에서 만든 URL로 접속하면 로그인 페이지가 표시되게 됩니다.

우리는 웹브라우저 컨트롤에 로그인 페이지를 표시할 것이기 때문에 위 URL을 웹브라우저 컨트롤로 보내줍니다.

 

1
2
//인증 시작
webBrowser.Navigate(new Uri(base.AuthURL));
cs

 

위 코드를 실행하면 웹브라우저에 다음과 같이 로그인 페이지가 표시됩니다.

 

 

이제 직접 네이버 아이디에 로그인하시면 됩니다.

오류 페이지

여기서 만약 오류페이지가 표시된다면

클라이언트 아이디, 콜백URL 잘못됐거나

등록한 애플리케이션이 제거 되거나 정지당했을 확률이 매우 높습니다.

보통은 오타인 경우가 많습니다 ㅎㅎㅎ

 

 

 

3-4. 결과값 받기

이제 사용자가 로그인을 완료하면 입력한 콜백URL에 'GET'방식으로 응답 파라미터가 넘어오게 됩니다.

예> http://blog.danggun.net/?code=[생성된 코드]&state=913431611

 

 

이제 이걸 파싱해서 데이터로 사용하면 됩니다.

 

파싱할때도 'NameValueCollection'를 'HttpUtility.ParseQueryString([받은 쿼리])'로 초기화하면 편하게 파싱할 수 있습니다.

 

1
2
//쿼리 파싱
NameValueCollection query = HttpUtility.ParseQueryString(webBrowser.Url.Query);
cs

 

오류 없이 정상적으로 코드가 넘어왔다면 로그인은 완료 된 것입니다.

 

4. 접근 토큰 얻기

이제 위에서 받은 로그인 코드를 확인하기 위해 접근 토큰(Access Token, 액세스 토큰)을 발급받아 보겠습니다.

이 접근 토큰이 있어야 비로소 네이버API에서 제공하는 다양한 기능을 사용할 수 있습니다.

 

4-1. 요청 URL세팅하기

네이버에서 제공하는 '접근 토큰 발급 요청 URL'에 'GET' 방식으로 쿼리를 붙여 요청용 URL을 완성해야 합니다.

(참고 : 네아로 개발자 센터 - 네이버 아이디로 로그인 API 명세)

 

API 명세에 '2. 접근 토큰 발급 요청'을 보면

요청 URL : https://nid.naver.com/oauth2.0/token

파라미터 : 'grant_type', 'client_id', 'client_secret', 'code String', 'state'

로 되어 있습니다.

 

이제부터는 콜백URL이 없고 'JSON'형태로 결과가 리턴되게 됩니다.

그러므로 웹브라우저 컨트롤을 사용할 필요는 없고 바로 'WebClient'를 통해 요청 및 결과를 리턴 받습니다.

 

'WebClient'의 인스턴스를 만들고 아래와 같이 쿼리를 세팅합니다.

 

1
2
3
4
5
6
7
8
9
10
11
WebClient webClient;
 
string sAccessToken_Url = "https://nid.naver.com/oauth2.0/token";
 
//쿼리 세팅
webClient = new WebClient();
webClient.QueryString.Add("grant_type""authorization_code");
webClient.QueryString.Add("client_id", [1번에서 등록할때 받은 클라이언트 아이디]);
webClient.QueryString.Add("client_secret", [1번에서 등록할때 받은 클라이언트 시크릿]);
webClient.QueryString.Add("code", [3번에서 받은 'code'값] );
webClient.QueryString.Add("state", State);
cs

 

4-2. 요청하고 데이터 받기
이제 'webClient.OpenRead()'를 호출하게 되면 결과가 'JSON'으로 오게 됩니다.

 

1
2
3
4
//요청
Stream stream = webClient.OpenRead(sAccessToken_Url);
//결과 받기
String sResultJson = new StreamReader(stream).ReadToEnd();
cs

 

이제 'sResultJson'를 'JSON'형태로 파싱하면 'access_token'을 받을 수 있습니다.

예>

{
"access_token":"[받은 액세스 토큰]",
"refresh_token":"[리플래시 토큰]",
"token_type":"bearer",
"expires_in":"3600"
}

 

 

에러가 넘어 온다면?
여기서 에러가 넘어오면 거의 '024'에러 일 것입니다.

 

'024'에러는 인증이 실패한 것인데 원인은

1) 오타(공백이 잘못들어간 경우도 포함됩니다.)

2) 로그인하고 받은 로그인 코드(code)의 기간 만료

3) 클라이언트 아이디 불일치

4) 클라이언트 시크릿 불일치

거의 이런 원인일 것입니다.

 

5. 블로그 카테고리 얻기

이제 '4.'에서 얻은 접근 코드를 사용하여 네이버 블로그 카테고리 조회 API에서 리스트를 받도록 하겠습니다.

 

5-1. 요청 만들기

네이버에서 제공하는 '블로그 카테고리 조회 API'의 URL에 'GET' 방식으로 쿼리를 붙여 요청용 URL을 완성합니다.

(참고 : 네아로 개발자 센터 - 블로그 글쓰기 API 명세)

 

API 명세에 '2. 블로그 카테고리 조회 API'을 보면

요청 URL : https://openapi.naver.com/blog/listCategory.json

파라미터 : 'blogId'

로 되어 있습니다.

 

'접근 코드'때와 마찬가지로 결과는 'JSON'으로 넘어오므로 'WebClient'를 이용하여 요청을 보내겠습니다.

여기서 주의 할점은 접근 토큰은 헤더에 'Authorization'으로 심어야 하며 'Bearer '로 시작해야 합니다.

 

1
2
3
4
5
6
7
8
WebClient webClient;
 
string sListCategoryApiUri = "https://openapi.naver.com/blog/listCategory.json";
string sBlogID = "c1dong8";
 
webClient = new WebClient();
webClient.Headers.Add("Authorization""Bearer " + [4번에서 받은 접근 토큰]);
webClient.QueryString.Add("blogId", sBlogID);
cs

 

5-2. 호출하고 결과 받기

이제 'WebClient.OpenRead()'를 통해 데이터를 요청하고 결과를 받습니다.

결과는 'JSON'으로 옵니다.

 

1
2
3
4
//요청
Stream stream = webClient.OpenRead(sListCategoryApiUri);
//결과 받기
string responseJSON2 = new StreamReader(stream).ReadToEnd();
cs

 

 

마무리

이거....알고나면 별거 아닌데 C#예제 찾기가 힘들어서 직접 만들어 봤습니다.

실수로 로그인코드와 접근 토큰을 착각하는 바람에 3일을 삽질했는데 API문서를 다시 보니까.....아 잰장 ㅋㅋㅋㅋㅋ

뭐 그러면서 배우는 거죠 ㅎㅎ

 

'Visual Studio 2015'용 프로젝트 입니다.

 

OAuth_Login.zip

 

신고
  1. KindaSwt 2016.06.25 02:00 신고  Address  Edit/Delete  Reply

    좋은 정보글 잘봤습니다ㅎ
    시간나면 씨샵으로 캎관리프로그램이나 만들어봐야겠네용

  2. 키드매지션 2016.10.25 09:38 신고  Address  Edit/Delete  Reply

    좋은글 감사합니다.

  3. 골리앗 2016.11.07 00:05 신고  Address  Edit/Delete  Reply

    안녕하세요... 공유해 주신 파일을 다운받아서 Test 해 보고 있습니다.
    그런데... 잘 안되네요...

    네이버 개발자 센터에 등록하고 Callback 을 http://blog.naver.com 으로 등록해서
    ClientID, ClientSecret 과 Callback URL 을 오타없이 잘 적용했는데...
    저는 오류페이지가 뜨네요...

    제 생각엔 Callback URL 이 잘못된거 아닌가 싶은데요... 혹시 뭐가 문제일까요?

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2016.11.07 08:55 신고  Address  Edit/Delete

      api를 호출했을때 넘어오는 오류 메시지를 확인해야 원인을 찾을 수 있습니다.

    • 골리앗 2016.11.07 09:12 신고  Address  Edit/Delete

      신경써 주셔서 감사합니다.
      어플리케이션 등록시 Windows App 의 Callback URL 만 등록했었는데... Windows App 이라 하더라도 Web 을 선택해서 Callback URL 을 적어주어야만 정상 동작하네요...

      혹시 몰라서 Web 을 선택하고 등록했더니 정상 동작합니다.

      감사합니다.

    • 감동 2017.03.22 00:31 신고  Address  Edit/Delete

      골리앗님 덕분에 해결했습니다. ㅠㅠ
      서비스 환경을 다 지운뒤에 pc web을 먼저 등록하고, win app을 추가로 등록하니까 바로 되네요 ㅎㅎㅎ
      정말 감사합니다.

  4. 골리앗 2016.11.08 00:20 신고  Address  Edit/Delete  Reply

    안녕하세요... 혹시 몰라 다시 한번 글을 올려봅니다.
    혹시 네이버 블로그 관련 API 를 보시면서... 블로그 글쓰기 API 를 찾은 적이 있으신지요?
    아무리 찾아봐도 님처럼 깔끔하게 설명해 주는 것이 없네요...
    API 에는 POST 방식으로 사용하라 하는데... 네이버개발자 포럼을 보면... GET 방식으로 하라는 것도 있고...
    어쨌든... GET 이나 POST 모두 안되서요...

    혹시나 해서 여쭤봅니다.

    그럼... 수고하세요...

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2016.11.08 11:49 신고  Address  Edit/Delete

      api 문서에 있습니다.
      https://developers.naver.com/products/blog
      https://developers.naver.com/docs/blog/post

      공식문서부터 찾으시는 습관을 들이시는게 좋습니다.
      글쓰기 api로 글쓰는 프로그램 만들어서 편하게 쓰고 있습니다.
      글쓰기는 post만 지원됩니다.
      자세한내용은 문서 확인하세요.

  5. 골리앗 2016.11.08 17:16 신고  Address  Edit/Delete  Reply

    넵... 답변 감사합니다.
    님의 답변이 많은 도움이 되었습니다.

    PS) 네이버 자료 보고 했는데... 저의 경우는 PO009 오류 (포스트 등록 시 필수데이터가 없습니다.) 가 나오더라구요...
    조치 방법으로는 네이버에서 "서버 내부 에러가 발생하였습니다. 포럼에 올려주시면 신속히 조치하겠습니다." 라고 나오는데... 아무래도 제가 잘못하고 있는듯 싶어서요...

    염치없는 부탁이지만... "https://openapi.naver.com/blog/writePost.json" 를 호출하는 부분만 Sample Code 를 부탁드려도 될까요? (부탁드리면서도 염치없다는 생각이 계속 드네요... ㅠㅠ)

    저의 경우는 WebClient 나 HttpWebRequest 객체를 사용하여 POST 방식으로 호출하는데요... PO009 오류가 계속 나서... 현재 막혀있는 상태라서요...

    감사합니다.

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2016.11.09 10:43 신고  Address  Edit/Delete

      문서에 보시면 필수 항목있습니다.
      필수항목은 빠지면 오류 떨어집니다.
      가끔 필수 항목이 재대로 들어갔을 때도 이 오류가 나기도 하는데 그때는 정말로 포럼에가서 물어봐야 합니다.
      저도 post형식문제로 포럼에서 도움받은적 있습니다 ㅎㅎㅎ

      api호출은 이 포스팅에 있는 방법그대로 사용가능합니다

  6. 골리앗 2016.11.12 22:05 신고  Address  Edit/Delete  Reply

    안녕하세요... 당근천국님...
    도움 주신 덕에 이미지 Upload 를 포함한 글쓰기 개발 완료했답니다.
    위에 설명해준 내용이 너무 도움이 많이 되었네요...
    감사합니다.

  7. 2017.07.20 15:38 신고  Address  Edit/Delete  Reply

    안녕하세요 좋은글 보고 배워갑니다.

    카페에 글올리고 싶은데 컴퓨터에 있는 이미지인데 멀티파트 예제도 올려주실수 있나요??

    제가 원하는건 다른 그냥 사이트 새로운 글과 이미지가 뜨면 카페에 자동으로 가져와서 글계속 올리고 싶은 프로젝트 입니다. 이미지는 저장했는데 사이트에서 모든 이미지를 가져오기까지했는데 이다음부터 OAUTH 로 들어가서 헤매고있네요...

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2017.07.21 09:10 신고  Address  Edit/Delete

      이미지 데이터는 바이너리로 첨부하면 올라갑니다.
      용량과 개수에 재한이 있는데 개수는 예전에는 개수는 10개고 용량은 50M이였던거 같은데 요즘은 어떤지 모르겠네요.

  8. 2017.07.21 18:27 신고  Address  Edit/Delete  Reply

    답글 감사합니다. 바이너리 부분은 공부를 못해서요..무지하니 검색어도 모르겠네요..개수는 글마다 10개 인가요? 제한은 괜찮을거 같네요..OAUTH 부터 몰라서요..죄송한데 도움 받을 수 있을까요? 네아로 작동을 잘 모르겠어서요 ㅠㅠ죄송해요...

  9. 2017.07.27 00:47 신고  Address  Edit/Delete  Reply

    요청 url 여러가지 해보다가
    string RedirectURL = "http://127.0.0.1/Api/Member/Oauth2ClientCallback/naver";

    //확인용 키 생성
    string State = (new Random()).Next().ToString();

    //인증요청용 전체 URL(쿼리 포함) 생성
    NameValueCollection listAuthURL_QueryString
    = HttpUtility.ParseQueryString(string.Empty);
    listAuthURL_QueryString["response_type"] = "code";
    listAuthURL_QueryString["client_id"] = ClientID;
    listAuthURL_QueryString["redirect_uri"] = RedirectURL;
    listAuthURL_QueryString["state"] = State;

    string AuthURL = "https://nid.naver.com/oauth2.0/authorize?"
    + listAuthURL_QueryString.ToString();

    webBrowser1.Navigate(new Uri(AuthURL));

    이런식으로 만들었어요 근데 이후에 로그인 직접한다음 동의를 누르면 스크립트 오류가 나는데..

    로그인 동의하기 하면 redirectUrl 로 가야하는데 웹브라우저가 스크립트 오류나면서 동작안하고

    3-3 에서 3-4로 못넘어가고있어요

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2017.07.28 03:44 신고  Address  Edit/Delete

      제가 마지막으로 봤을때는 네이버api가 로컬호스트를 지원하지 않았는데 로컬호스트 지원여부부터 확인하셔야 할듯 합니다.

      오류 내용을 먼저 확인하고 질문을 해주세요.

  10. 2017.07.31 20:48 신고  Address  Edit/Delete  Reply

    무슨내용인지몰라서 블로그 URL로 바꿔도 똑같이 로그인이 안되는데 어떻게 해야 하는지...서비스 url과 콜백 url 같은걸 입력했습니다. c#윈폼으로 하고있는데 어떻게 처리해야 하나요.ㅠㅠ

  11. 2017.08.07 18:06 신고  Address  Edit/Delete  Reply


    Notice: Use of undefined constant NAVER_OAUTH_AUTHORIZE_URL - assumed 'NAVER_OAUTH_AUTHORIZE_URL' in C:\Apache24\htdocs\index1.php on line 2

    Fatal error: Uncaught Error: Class 'UserSession' not found in C:\Apache24\htdocs\index1.php:19 Stack trace: #0 C:\Apache24\htdocs\index1.php(36): OAuthSampleRequest->start_session() #1 {main} thrown in C:\Apache24\htdocs\index1.php on line 19

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2017.08.08 09:16 신고  Address  Edit/Delete

      이거 네이버쪽 인증방식이 바뀐거거나 버그가 있는듯하네요.
      네이버 개발자 센터 카페가 있는데 거기에 문의해보셔야 할듯합니다.

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2017.08.08 18:03 신고  Address  Edit/Delete

      아 지금보니 그게 아니네요.
      이건 코드 자체가 잘못된 겁니다.
      애초에 NAVER_OAUTH_AUTHORIZE_URL 가선언되지 않았다는 에러인데 다른언어 문법오류를 저한테 물어보셔봤자 의미 없습니다.

  12. 2017.08.08 17:38 신고  Address  Edit/Delete  Reply

    혹시 당근천국님은 문제없이 c# 작동되시는지요..아래부분 보시면 curl설치 php 상에서 해야 되는건지요 아파치만 설치해서 따로 뭘 설치해야 하는지요

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2017.08.08 18:05 신고  Address  Edit/Delete

      그건 php 예제라 그런거고 c#은 다른 방식으로 처리합니다.
      본문에 제가 마지막으로 테스트한 프로젝트 있습니다.

  13. 2017.08.08 17:54 신고  Address  Edit/Delete  Reply

    Fatal error: Uncaught Error: Call to undefined function curl_init() in C:\Apache24\htdocs\callback.php:10 Stack trace: #0 {main} thrown in C:\Apache24\htdocs\callback.php on line 10 // $ch = curl_init(); ?이부분인가요

    <?php
    // 네이버 로그인 콜백 예제
    $client_id = "2222222222222222";
    $client_secret = "222222222";
    $code = $_GET["code"];;
    $state = $_GET["state"];;
    $redirectURI = urlencode("http://222.222.222.222/callback.php");
    $url = "https://nid.naver.com/oauth2.0/token?grant_type=authorization_code&client_id=".$client_id."&client_secret=".$client_secret."
    &redirect_uri=".$redirectURI."&code=".$code."&state=".$state;
    $is_post = false;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, $is_post);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $headers = array();
    $response = curl_exec ($ch);
    $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    echo "status_code:".$status_code."
    ";
    curl_close ($ch);
    if($status_code == 200) {
    echo $response;
    } else {
    echo "Error 내용:".$response;
    }
    ?>

  14. 2017.08.08 18:33 신고  Address  Edit/Delete  Reply

    파일이있었네요 ㅠㅠ내용만 주구장창 쳐다봤어요 아래로 진행이 안되서 ㅠㅠ
    감사합니다.

  15. 율아 2017.08.11 14:37 신고  Address  Edit/Delete  Reply

    JAVA로 된 소스코드는 없나요?ㅠㅠ 막상 따라하려니까 버겁네요ㅠㅠ

댓글 작성

이름
패스워드
홈페이지
비밀글

티스토리 툴바