2011-08-15 1 views
5

YouTube에 사용자의 즐겨 찾기 동영상 목록을 표시하려고합니다. 기본적으로 비디오 피드를 받기 전에 로그인해야 인증 토큰을 얻을 수 있습니다. 쿠키에 문제가 발생했습니다. 여기에 로깅을위한 내 코드입니다 :Google 인증 CircularRedirectException

public static String loginUser(String username, String password){ 

     Log.i("Utils", "Start logging user"); 
     // Create a new HttpClient and Post Header 
     DefaultHttpClient httpclient = new DefaultHttpClient(); 
     CookieStore cookieStore = new BasicCookieStore(); 
     HttpContext localContext = new BasicHttpContext(); 
     // Bind custom cookie store to the local context 
     localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore); 

     HttpPost httppost = new HttpPost("https://www.google.com/youtube/accounts/ClientLogin"); 
     httppost.addHeader("Content-Type","application/x-www-form-urlencoded"); 

     String result = ""; 
     try { 
      // Add your data 
      StringEntity tmp = 
       new StringEntity("Email="+ username +"&Passwd="+ password +"&service=youtube&source=speed bit", "UTF-8"); 
      httppost.setEntity(tmp); 

      // Execute HTTP Post Request 
      HttpResponse response = httpclient.execute(httppost, localContext); 
      result = EntityUtils.toString(response.getEntity()); 

     } catch (ClientProtocolException e) { 
       // TODO Auto-generated catch block 
     } catch (IOException e) { 
       // TODO Auto-generated catch block 
     } 
     finally{ 
       //httpclient.close(); 

     } 

     Log.i("Utils", "End logging user"); 


     if (result.equals("")) 
      return result; 

     String []firstArr = result.split("YouTubeUser"); 
     String []secondArr = firstArr[0].split("="); 
     result = secondArr[1]; 

     return result; 
    } 

내가이 인증 토큰을 얻을 후 나는 비디오를 얻을 : 모든

String urlFeed = params[0]; 
        String auth = params[1]; 
        InputStream in; 
        HttpGet get = new HttpGet(urlFeed); 

        if (auth != null){ 

         get.setHeader("Authorization","GoogleLogin auth="+auth); 
         get.setHeader("X-GData-Key", 
         "key=AI39si5t8eJE_CVcakc-Hzs8wroPcsOHi_fqT03SG6f_lGrJsku0xyfPyB1qZlmYtN5cflfcYAgmvMF2QLy3uG1F6sy-cRzwdg"); 
        } 

        HttpResponse resp = null; 



        try { 
         DefaultHttpClient httpClient = new DefaultHttpClient(); 
         CookieStore cookieStore = new BasicCookieStore(); 
         HttpContext localContext = new BasicHttpContext(); 
         // Bind custom cookie store to the local context 
         localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore); 
         resp = httpClient.execute(get, localContext); 
        } catch (ClientProtocolException e) { 
         Log.e(getClass().getSimpleName(), "HTTP protocol error", e); 
        } catch (IOException e) { 

         Log.e(getClass().getSimpleName(), "Communication error", e); 
        } 

첫째는 로그 캣에서이 일을 제시한다

08-15 00:21:36.048: WARN/ResponseProcessCookies(4324): Cookie rejected: "BasicClientCookie[version=0,name=PREF,domain=.google.com,path=/,expiry=Wed Aug 14 00:21:36 GMT+02:00 2013]". Illegal domain attribute "google.com". Domain of origin: "www.google.co.il" 

다음에 충돌이 발생합니다. resp = httpClient.execute(get, localContext); 여기에 logcat이 있습니다.

08-15 00:21:36.058: ERROR/YoutubeFeedTask(4324): HTTP protocol error 
08-15 00:21:36.058: ERROR/YoutubeFeedTask(4324): org.apache.http.client.ClientProtocolException 
08-15 00:21:36.058: ERROR/YoutubeFeedTask(4324):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:557) 
08-15 00:21:36.058: ERROR/YoutubeFeedTask(4324):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
08-15 00:21:36.058: ERROR/YoutubeFeedTask(4324):  at com.android.mytubedownloader.BaseActivity$YoutubeFeedTask.doInBackground(BaseActivity.java:551) 
08-15 00:21:36.058: ERROR/YoutubeFeedTask(4324):  at com.android.mytubedownloader.BaseActivity$YoutubeFeedTask.doInBackground(BaseActivity.java:1) 
08-15 00:21:36.058: ERROR/YoutubeFeedTask(4324):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
08-15 00:21:36.058: ERROR/YoutubeFeedTask(4324):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
08-15 00:21:36.058: ERROR/YoutubeFeedTask(4324):  at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
08-15 00:21:36.058: ERROR/YoutubeFeedTask(4324):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
08-15 00:21:36.058: ERROR/YoutubeFeedTask(4324):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
08-15 00:21:36.058: ERROR/YoutubeFeedTask(4324):  at java.lang.Thread.run(Thread.java:1019) 
08-15 00:21:36.058: ERROR/YoutubeFeedTask(4324): Caused by: org.apache.http.client.CircularRedirectException: Circular redirect to 'http://www.google.co.il/' 
08-15 00:21:36.058: ERROR/YoutubeFeedTask(4324):  at org.apache.http.impl.client.DefaultRedirectHandler.getLocationURI(DefaultRedirectHandler.java:173) 
08-15 00:21:36.058: ERROR/YoutubeFeedTask(4324):  at org.apache.http.impl.client.DefaultRequestDirector.handleResponse(DefaultRequestDirector.java:903) 
08-15 00:21:36.058: ERROR/YoutubeFeedTask(4324):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:468) 
08-15 00:21:36.058: ERROR/YoutubeFeedTask(4324):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 

답변

0

보안 문제로 인해 HTTP 프로토콜 오류가 발생할 때마다 시도해보십시오 HttpPost httppost = new HttpPost("**http**://www.google.com/youtube/accounts/ClientLogin");

그리고 https에서 s를 제거하십시오. 그것은 보통 내 문제를 해결합니다.

행운을 빌어 요!

0

전체적인 이유가 확실하지 않지만 this document은 URL이 사용되지 않는다고 말합니다. 어떻게 든 도움이 되길 바랍니다.

이 URL은 2010 년 10 월에 업데이트되었습니다. 이전 URL은 서비스 약관에 설명 된 정책에 따라 사용되지 않습니다. 이전 URL (https://www.google.com/youtube/accounts/ClientLogin)을 사용하는 애플리케이션을 업데이트하는 경우 새 URL은 사용자의 YouTube 계정 이름을 YouTubeUser 값으로 반환하지 않으며 성공적인 ClientLogin 요청.

0

웹 사이트 URL을 통해 YouTube에 액세스하면 안됩니다. 공식적인 동영상 액세스 방법은 Youtube Data API

입니다.