2016-02-08 2 views
0

Мне нужно HttpUrlConnection использовать POST метод, но он не играет хорошо.Android HttpUrlConnection setting POST method

connection = (HttpURLConnection) link.openConnection(); 
connection.setRequestMethod("POST"); 
... 

В отладчик:

  • на первой линии я вижу connection = null, как и ожидалось
  • второй линии я могу видеть connection.method = "GET" как и ожидалось
  • далее я вижу connection.method = "GET", который не ожидается

Как я могу получить HttpUrlConnection для использования POST?

Решение

При открытии HttpUrlconnection на «HTTPS» протокола, соединение постоянно перекрывает соединение с «GET».

Через «HTTP» соединение позволит использовать метод «POST», если он установлен вручную.

+0

Если вы используете HTTPS, вы должны использовать HttpsURLConnection: http://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html –

+0

В приложении есть несколько соединений, некоторые из которых - HTTP https , поэтому почему эта ошибка была немного беспорядочной, чтобы преследовать. – Jacksonkr

+1

Ах, я вижу. Рад, что вы разобрались! –

ответ

1

Решение

При открытии HttpUrlconnection на «HTTPS» протокола, соединение постоянно перекрывает соединение с «GET».

Через «HTTP» соединение позволит использовать метод «POST», если он установлен вручную.

0
public void postData() { 
// Create a new HttpClient and Post Header 
HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost("http://www.yoursite.com/script.php"); 

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 
} 

}

+0

«HttpClient» - это то, что раньше было в этом приложении, но все было перенесено из-за сложности TLS 1.2, поэтому я работаю с «HttpUrlConnection» – Jacksonkr

+1

https://www.numetriclabz.com/android-post- и-получить запрос-используя-HttpURLConnection / –

0

Попробуйте:

public static String executePostHttpRequest(final String path, Map<String, String> params) throws ClientProtocolException, IOException { 
    String result = null; 
    HttpURLConnection urlConnection = null; 
    try { 
     String postData = getQuery(params); 
     byte[] postDataBytes = postData.getBytes("UTF-8"); 

     URL url = new URL(path); 
     urlConnection = (HttpURLConnection) url.openConnection(); 
     urlConnection.setConnectTimeout(30000); 
     urlConnection.setReadTimeout(30000); 
     urlConnection.setRequestMethod("POST"); 
     urlConnection.setDoOutput(true); 
     urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
     urlConnection.setRequestProperty("charset", "UTF-8"); 
     urlConnection.setRequestProperty("Content-Length", Integer.toString(postDataBytes.length)); 

     OutputStream out = urlConnection.getOutputStream(); 
     out.write(postDataBytes); 
     out.close(); 
     result = readStream(urlConnection.getInputStream()); 
    } finally { 
     if (urlConnection != null) { 
      urlConnection.disconnect(); 
     } 
    } 
    return result; 
} 

Где:

private static String getQuery(Map<String, String> params) throws UnsupportedEncodingException{ 
    StringBuilder result = new StringBuilder(); 
    boolean haveData = params != null && params.size() > 0; 
    if (haveData) { 
     boolean first = true; 
     for (Map.Entry<String, String> entry : params.entrySet()){ 
      String value = entry.getValue(); 
      if (value != null) { 
       if (first) { 
        first = false; 
       } else { 
        result.append("&"); 
       } 
       result.append(URLEncoder.encode(entry.getKey(), "UTF-8")); 
       result.append("="); 
       result.append(URLEncoder.encode(value, "UTF-8")); 
      } 
     } 
    } 
    return result.toString(); 
} 

P.S. Я не двигал жестко закодированные строки в константы для лучшего понимания.

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