2013-03-20 2 views
0

Я пытаюсь открыть URL для Youtube (телефоны не являются настройками прокси-сервера, прямо на интернет)Android HttpPost прибудет "Недопустимый запрос URI" от Youtube

http://gdata.youtube.com/feeds/api/videos/-/music?q=gagamv&max-results=50&alt=json&v=2

URL-адрес выше Я поместил в любом браузере ПК работоспособную работу (вернет чистый JSON String), даже я не входил в Youtube.

Но этот URL я попытался получить доступ через HttpPost Android, только я могу получить это Invalid Request URI

Вот мой код:

public static final String HEADER_TYPE="Content-Type"; 
    private static final String HEADER_TYPE_SET="application/text; charset=utf-8"; 
    public static final String HEADER_TYPE_2="Accept"; 
    private static final String HEADER_TYPE_SET_2="application/x-www-form-urlencoded"; 

    /** Socket操作逾時(3600秒) */ 
    public static final int TIMEOUT_SOCKET=7000; 
    /** 連線逾時(3600秒) */ 
    public static final int TIMEOUT_CONECTION=7000; 

    List<NameValuePair> params=new ArrayList<NameValuePair>(); 
    HttpParams httpP=null; 
    DefaultHttpClient mHttpClient=null; 
    UrlEncodedFormEntity entity=null; 
    HttpResponse httpResp=null; 
    String ret=""; 

    BasicHeader[] header=new BasicHeader[2]; 
    header[0]=new BasicHeader(HEADER_TYPE, HEADER_TYPE_SET); 
    header[1]=new BasicHeader(HEADER_TYPE_2, HEADER_TYPE_SET_2); 
    httpP=new BasicHttpParams(); 
    HttpConnectionParams.setConnectionTimeout(httpP, TIMEOUT_CONECTION); 
    HttpConnectionParams.setSoTimeout(httpP, TIMEOUT_SOCKET); 
    String url=new String("http://gdata.youtube.com/feeds/api/videos/-/music?q=gagamv&max-results=50&alt=json&v=2"); 
    Log.d(Constants.TAG, "Youtube search URL: "+url); 
    HttpPost post=new HttpPost(url); 
    mHttpClient=new DefaultHttpClient(httpP); 

    entity=new UrlEncodedFormEntity(params); 
    post.addHeader(entity.getContentType()); 
    post.setEntity(entity); 
    httpResp=mHttpClient.execute(post); 

    String status=httpResp.getStatusLine().toString(); 
    ret=new String(EntityUtils.toString(httpResp.getEntity(), "UTF-8")); 

Что я могу сделать, чтобы преодолеть эту проблему?

+1

Почему вы используете POST? – Rob

+0

Вы понимаете, что ничего не ставите в параметрах? – njzk2

+0

К сожалению, я снова спам на тупой ситуации ... Спасибо за ваш отзыв :-) – RRTW

ответ

1

Вам необходимо использовать HTTP GET Request. Проблема в том, что вы используете HTTP-сообщение, и URL-адрес будет возвращать данные при использовании запроса на получение.

Попробуйте следующий код (я взял размер буфера до 4096, но вы можете изменить это, чтобы быть динамическим для вашего требования):

 URL url = new URL("http://gdata.youtube.com/feeds/api/videos/-/music?q=gagamv&max-results=50&alt=json&v=2"); 
      HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
      try { 
      InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 
      byte buffer[] = new byte[4096]; 

      in.read(buffer); 
      String str = new String(buffer); 
      Log.d(TAG, " Data: " + str); 

      } finally { 
      urlConnection.disconnect(); 
      } 
+0

Другая часть моего кода использует HttpPost для подключения к моему серверу, и я просто копирую этот код для доступа к Youtube и забываю перейти к HttpGet ... Спасибо :-) – RRTW

+0

Ваш приветственный помощник ... :-) –