2017-02-18 19 views
1

Пожалуйста, я прошел весь вопрос из stackoverflow, но это не относится к моей проблеме.Я пробовал из POSTMAN API работать отлично, но не от моего кода Java?

enter image description here Пожалуйста, обратите внимание, что изображение с хорошим качеством от POSTMAN.

Но когда я попробовал от android код не работает. Мой пример кода Android здесь.

@Override 
     protected String doInBackground(Void... params) { 
      HttpURLConnection urlConnection = null; 
      BufferedReader reader = null; 

      // Will contain the raw JSON response as a string. 
      String forecastJsonStr = null; 

      try { 
       URL url = new URL("sample url"); 

       String postData = "key1=valu1&key2=valu2"; 

       HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
       conn.setReadTimeout(55000 /* milliseconds */); 
       conn.setConnectTimeout(55000 /* milliseconds */); 
       conn.setRequestMethod("POST"); 
       conn.setDoInput(true); 
       conn.setDoOutput(true); 
       OutputStream os = conn.getOutputStream(); 
       BufferedWriter writer = new BufferedWriter(
         new OutputStreamWriter(os)); 
       writer.write(postData); 

       writer.flush(); 
       writer.close(); 
       os.close(); 

       int responseCode=conn.getResponseCode(); 

       if (responseCode == HttpsURLConnection.HTTP_OK) { 

        BufferedReader in=new BufferedReader(
          new InputStreamReader(
            conn.getInputStream())); 
        StringBuffer sb = new StringBuffer(""); 
        String line=""; 

        while((line = in.readLine()) != null) { 
         Log.e("response ",line); 
         sb.append(line); 
         break; 
        } 

        in.close(); 
        return sb.toString(); 

       } 
       else { 
        return new String("false : "+responseCode); 
       } 
      } catch (Exception e) { 
       Log.e("PlaceholderFragment", "Error ", e); 
       // If the code didn't successfully get the weather data, there's no point in attemping 
       // to parse it. 
       return null; 
      } finally { 
       if (urlConnection != null) { 
        urlConnection.disconnect(); 
       } 
       if (reader != null) { 
        try { 
         reader.close(); 
        } catch (final IOException e) { 

        } 
       } 
      } 
     } 

Над кодом java code возвращает 405 код ошибки. Я также попробовал от OkHttp. Пожалуйста, помогите.

ответ

1

Помещение '/' в конце URL-адреса приводит к тому, что перенаправление происходит, потому что серверу нравится URL-адреса, которые заканчиваются на '/'. POST полностью поддерживается URL-адресом, на который перенаправляется ваш сервер, но клиент выполняет запрос GET, когда он ведет себя согласно вашему вызову setRedirecting() (cURL делает то же самое с ключом -L). Исправление заключается в том, чтобы поставить a '/' в конце URL-адреса или захватить заголовок Location из ответа самостоятельно, а затем инициировать другой запрос POST вручную.

Это можно наблюдать в проводах. Вы можете проверить теорию, пытаясь выполнить запрос GET с вашим браузером по URL-адресу с добавлением к нему косой черты. Это заставит браузер, чтобы получить 405. Вот фиксированный код для Android, этот код использует простые затруднительное положение символа «/» в URL (не производство готового):

Подробнее от here.

дайте мне знать, если это помогает :)

Кроме того, попробуйте использовать этот кусок кода:

public void postData() { 
// Create a new HttpClient and Post Header 
HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost("https://your URL"); 

try { 
    // Add your data 
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
    nameValuePairs.add(new BasicNameValuePair("id", "12345")); 
    nameValuePairs.add(new BasicNameValuePair("stringdata", "Hi")); 
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

    // Execute HTTP Post Request 
    HttpResponse response = httpclient.execute(httppost); 

} catch (ClientProtocolException e) { 
    // TODO Auto-generated catch block 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
} 
} 
+1

Я пытался, прежде чем положить вопрос здесь, но не работает для меня –

+1

я также использовал POSTMAN генерируется Java-код –

+0

ли вы попробуйте использовать другой URL? – Han

0

Ваш API вызов reciveving данных в параметре GET. Таким образом, данные должны отправить вместе с URL, как указано ниже

  String postData = Uri.encode("key1=valu1&key2=valu2"); 
      URL url = new URL("sample url"+"?+postData); 

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

  • Нет связанных вопросов^_^