2015-10-31 3 views
2

Я использую метод get для HttpsUrlConnection. Когда я тестирую свой код на eclipse (Windows), он отлично работает. Когда я сжимаю его в файле jar и использую его на студии Android, он дает мне «405 - метод не разрешен». Что значит, я использую метод с плохим глаголом (ожидается GET).android - httpsurlconnection 'get' 405 - метод не разрешен

Это, как я установить тип метода HTTP:

 conn.setRequestMethod("GET"); 

Я устанавливаю метод HTTP, чтобы 'получить', и когда я его отладки - conn.getRequestMethod = GET и POST conn.delegate.getRequestMethod = ,

Отклик ошибка - { "Сообщение": "Запрашиваемый ресурс не поддерживает метод HTTP 'POST'"}

delegate method type

main conn method type

EDITED - код добавил:

public static HttpsURLConnection getClient(URL url, LoginToken securityToken, RequestMethod methodType, String requestFormat, String responseFormat) throws IOException, SecurityTokenException { 
    HttpsURLConnection conn = (HttpsURLConnection)url.openConnection(); 
    conn.addRequestProperty("Accept-Charset", "UTF-8"); 
    conn.addRequestProperty("Content-Type", requestFormat); 
    conn.addRequestProperty("Accept", responseFormat); 
    conn.addRequestProperty("User-Agent", "***SDK/1.0"); 
    conn.setRequestProperty("Cache-Control", "no-cache"); 
    if(securityToken != null) { 
     LoginToken.ValidateToken(securityToken); 
     conn.addRequestProperty("Authorization", String.format("Bearer %1$s", new Object[]{securityToken.getTemporarySecurityCode()})); 
    } 

    conn.setRequestMethod(methodType.toString()); 
    conn.setUseCaches(false); 
    conn.setDoOutput(true); 
    return conn; 
} 

    public Boolean IsCompleted() throws SecurityTokenException, CommandFailedException { 
    LoginToken.ValidateToken(this.getSecurityToken()); 
    HttpsURLConnection conn = null; 
    Gson gson = (new GsonBuilder()).create(); 

    String json; 
    try { 
     URL url = new URL(String.format("https://api.***.com/%1$s/detector/%2$s/status", new Object[]{"v1", this.getPID()})); 
     conn = ***Client.getClient(url, this.getSecurityToken(), RequestMethod.GET, "application/json", "text/plain"); 
     Throwable response1; 
     BufferedInputStream inputStream; 
     if(conn.getResponseCode() != 200) { 
      response1 = null; 
      inputStream = null; 

      String response2; 
      try { 
       BufferedInputStream inputStream1 = new BufferedInputStream(conn.getErrorStream()); 

       try { 
        response2 = HttpURLConnectionHelper.convertStreamToString(inputStream1); 
       } finally { 
        if(inputStream1 != null) { 
         inputStream1.close(); 
        } 

       } 
      } catch (Throwable var41) { 
       if(response1 == null) { 
        response1 = var41; 
       } else if(response1 != var41) { 
        response1.addSuppressed(var41); 
       } 

       throw response1; 
      } 

      BadLoginResponse response4 = (BadLoginResponse)gson.fromJson(response2, BadLoginResponse.class); 
      if(response4 == null) { 
       throw new RuntimeException("Unable to process server response."); 
      } 

      throw new CommandFailedException(response4.getMessage(), conn.getResponseCode()); 
     } 

     Throwable response = null; 
     response1 = null; 

     try { 
      inputStream = new BufferedInputStream(conn.getInputStream()); 

      try { 
       json = HttpURLConnectionHelper.convertStreamToString(inputStream); 
      } finally { 
       if(inputStream != null) { 
        inputStream.close(); 
       } 

      } 
     } catch (Throwable var43) { 
      if(response == null) { 
       response = var43; 
      } else if(response != var43) { 
       response.addSuppressed(var43); 
      } 

      throw response; 
     } 
    } catch (IOException var44) { 
     throw new RuntimeException(var44.getMessage()); 
    } finally { 
     if(conn != null) { 
      conn.disconnect(); 
     } 

    } 

Как это исправить?

+0

кажется, что вы отправляете запрос на отправку определенного URL-адреса, который не разрешен для сообщения – Tony

+0

. В чем проблема. Я установил метод http GET, и делегат соединения по-прежнему отправляет запрос POST. –

+0

can u показать ur код – Tony

ответ

6

Спасибо BNK! Решение должно было удалить conn.setDoOutput(true)

+0

Рад, что это могло помочь :) – BNK

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