2015-03-23 4 views
1

, поэтому я пытаюсь выполнить запрос GET для своего веб-сервиса, и поскольку я видел, что класс HttpGet устарел, я вместо этого пытаюсь использовать класс HttpURLConnection, и я использовал его успешно с методом «POST» ... однако, когда я пытаюсь выполнить простой запрос «GET», я получаю ошибку 405 (плохой метод).Android JSON Получите через ошибку HttpURLConnection 405

Я протестировал ссылку в DHC, и ссылка в порядке.

Вот мой метод:

public JSONObject getClientByDeviceId (String link) { 
    try { 
     URL url = new URL(link); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

    //   conn.setRequestMethod("GET"); 
    //   conn.setDoOutput(true); 
    //   conn.setDoInput(true); 
    //   conn.setUseCaches(false); 
    //   conn.setAllowUserInteraction(false); 
    //   conn.setRequestProperty("Content-Type", "application/json"); 

     OutputStream outputStream = conn.getOutputStream(); 
     outputStream.close(); 

     if (conn.getResponseCode() != 200) { 
      Log.e("conn", "Error code: " + conn.getResponseCode()); 
      BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
      StringBuilder sb = new StringBuilder(); 
      String line; 

      while ((line = br.readLine()) != null) { 
       sb.append(line); 
      } 
      br.close(); 
      conn.disconnect(); 

      JSONObject returnedObject = new JSONObject(sb.toString()); 

      if (returnedObject != null) { 
       Log.e("conn", "If 400, this is the object gained: " +  returnedObject.getString("Message")); 
      } else { 
       Log.e("conn", "didn't get any JSON object"); 
      } 

      conn.disconnect(); 
      return returnedObject; 

     } 
     else { 
      BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
      Log.e("conn", "GREAT SUCCESS !!: " + conn.getResponseCode()); 
      StringBuilder sb = new StringBuilder(); 

      String line; 

      while ((line = br.readLine()) != null) { 
       sb.append(line); 
      } 
      br.close(); 
      conn.disconnect(); 

      JSONObject returnedObject = new JSONObject(sb.toString()); 

      return returnedObject; 
     } 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

Обычно я хотел бы сказать, что эта проблема вызвана пытается сделать «GET» запрос в URL марки «Post». Но без двух классов HttpGet и HttpPost я действительно не знаю, куда обращаться, все свойства, которые закомментированы, похожи на это, потому что я попробовал их в запросе POST, и теперь я удалил один за другим, чтобы попытаться получить метод Работа.

Любые идеи? или ссылку на обновленное руководство по правильному использованию этого класса HttpURLConnection, поскольку я не смог его найти.

Заранее благодарен!

+0

Вы пробовали его на Почтальоне? –

+0

Да, а также в DHC (другое расширение Chrome) - они не возвращают ошибку 405 – shaqed

+0

Затем спросите своего разработчика php, который работает над этим веб-сервисом. –

ответ

0

HTTP 405 вызван неправильным вызовом метода (метод не разрешен). Это означает, что вы вызвали метод GET на запрос POST или наоборот. Вы должны добавить обработку для вашего метода GET на свой веб-сервис, чтобы он работал.

1

решаемое это, по-видимому, нужно этот код должен быть удален:

OutputStream outputStream = conn.getOutputStream(); 
    outputStream.close(); 

Я предполагаю, что это потому, что я дал GET URL и положить, что OutputStream в моем коде, что вызвало проблему.

я до сих пор, однако, не понимаю, почему я получил «405: метод GET не разрешено», тогда как я думаю, что я должен был получить обратное: «POST» не допускается ...

Во всяком случае, что мое решение , большое спасибо за помощь ребятам!

0

Для всех, кто до сих пор добирался сюда от поисковой системы, мое решение было похоже - Я удалил строку «conn.setDoOutput (true);» (или установите его на значение false)

Смежные вопросы