내가 왜 OAuth 인증 테스트를 하필이면 이글루스에서 시작했을까?ㅡㅡ;


안된다. 설마 인증이 안될까? 테스트 소스나 토큰에 무슨 문제가 있었겠지... 했지만...


같은 형태로 다음 네이버 다 잘되는거 확인해보고 난뒤야 


결과적으로 결론 내린게 이글루스 OAuth API가 시스템상의 이유로 오래전부터 먹통이었다는거...



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
 
import oauth.signpost.OAuthConsumer;
import oauth.signpost.OAuthProvider;
import oauth.signpost.basic.DefaultOAuthProvider;
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
 
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
 
public class BlogEgloos {
    static final String REQUEST_TOKEN_URL = "http://api.egloos.com/request_token";
    static final String AUTHORIZE_URL = "http://api.egloos.com/authorize";
    static final String ACCESS_TOKEN_URL = "http://api.egloos.com/access_token";
     
    static final String CONSUMER_KEY = "==============================";
    static final String CONSUMER_SECRET = "===============================";
 
    
    static final String API_URL = "http://api.egloos.com";
     
 
    public static void main(String[] args) {
        
        try {
            
            // Service Provider 객체 생성
            OAuthProvider provider = new DefaultOAuthProvider(REQUEST_TOKEN_URL, 
                                                                                       ACCESS_TOKEN_URL, 
                                                                                       AUTHORIZE_URL);  
            
            // Consumer 객체 생성
            OAuthConsumer consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, 
                                                                                                        CONSUMER_SECRET);
 
            //String authUrl = provider.retrieveRequestToken(consumer, OAuth.OUT_OF_BAND); 
            //파라미터를 OAuth.OUT_OF_BAND 즉 oob로 보내니까 인증코드페이지로 이동 못하고 
             //아무 메세지도 없는 현상이 있음. 이것도 이글루스api에서만 발생하는 현상....  
            
            String authUrl = provider.retrieveRequestToken(consumer, "");
 
            System.out.println("아래 URL로 가서 사용자 인증을 하시면"
                    + " 인증코드(verifier)를 얻을 수 있습니다.");
            System.out.println(authUrl);
 
            System.out.print("인증코드 입력 : ");
            
            Scanner s = new Scanner(System.in);        
            String verifier = s.next();
            
            //에러나는 지점 
            provider.retrieveAccessToken(consumer, verifier);
             //에러나는 지점
/*
            System.out.println(consumer.getToken());
            System.out.println(consumer.getTokenSecret());
            consumer.setTokenWithSecret(consumer.getToken(), consumer.getTokenSecret());
            
*/    
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(API_URL + "/========/post.json");
            
            List<NameValuePair> params = new ArrayList<NameValuePair>(2);
            params.add(new BasicNameValuePair("post_title""제목"));
            params.add(new BasicNameValuePair("post_content""본문"));
 
            httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
            
            // request를 서명합니다.
            consumer.sign(httpPost);
            
            HttpResponse response = httpclient.execute(httpPost);
            HttpEntity entity = response.getEntity();
 
            if (entity != null) {
                InputStream instream = entity.getContent();
                try {
                    // do something useful
                    
                    BufferedReader br = new BufferedReader(new InputStreamReader(instream));
                    String tmpStr = "";
                    while( (tmpStr = br.readLine()) != null) {
                        System.out.println(tmpStr);
                    }
                    
                } finally {
                    instream.close();
                }
            }
 
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}



OAuth로 접근해서 블로그에 글 하나 올리는 아주 간단한 소스인데 실행해보면



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
oauth.signpost.exception.OAuthCommunicationException: Communication with the service provider failed: Server returned HTTP response code: 500 for URL: http://api.egloos.com/access_token
    at oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:214)
    at oauth.signpost.AbstractOAuthProvider.retrieveAccessToken(AbstractOAuthProvider.java:99)
    at BlogEgloos.main(BlogEgloos.java:58)
Caused by: java.io.IOException: Server returned HTTP response code: 500 for URL: http://api.egloos.com/access_token
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1675)
    at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1673)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1671)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1244)
    at oauth.signpost.basic.HttpURLConnectionResponseAdapter.getContent(HttpURLConnectionResponseAdapter.java:18)
    at oauth.signpost.AbstractOAuthProvider.handleUnexpectedResponse(AbstractOAuthProvider.java:228)
    at oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:189)
    ... 2 more
Caused by: java.io.IOException: Server returned HTTP response code: 500 for URL: http://api.egloos.com/access_token
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1626)
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
    at oauth.signpost.basic.HttpURLConnectionResponseAdapter.getStatusCode(HttpURLConnectionResponseAdapter.java:22)
    at oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:178)
    ... 2 more



500에러 즉... internal server error 떨어진다.


여기저기 검색해보니... 남들도 다 동일한 증상, 


현재 이글루스 모바일앱으로 가장 먼저 등록되어 있는 "짱글루스"인가 하는 앱도 OAuth를 사용하는데 마찬가지로 로그인이 안된다.


인증 안된다는 문의가 몇년전부터 계속 올라와있는데, 제대로된 답변도 없네...


이런게 무슨 OpenAPI라고... 이글루스 진짜 망할려고 하나?






'OpenAPI > 이글루스' 카테고리의 다른 글

이글루스 metaWeblog API (XML-RPC) JAVA 샘플 예제  (0) 2014.03.21
:
Posted by 정규식