2016-03-24 7 views
2

Android belgeleri belirttiği gibi, setDoOutPut(true);'u ayarladıktan sonra bağlantı POST olarak gönderilir. Ancak, hata ayıklayıcısında HTTPURLConnection yöntem üyesi denetleyin, her zaman setDoOutput (true) ve hatta setRequestMethod("POST") sonra bile GET olur. Bir şekilde GET'a geri yüklüyor muyum?HttpURLConnection yöntemi her zaman GET mi?

URL url = new URL(serverAddr); 
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
urlConnection.setDoOutput(true); 
urlConnection.setRequestMethod(verb); 
urlConnection.setFixedLengthStreamingMode(postBody.getBytes().length); 
//urlConnection.setRequestProperty("Content-Length", postBody.getBytes().toString()); 
urlConnection.setRequestProperty("Content-Type", "application/json;charset=utf-8"); 

urlConnection.connect(); 

OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream()); 
out.write(postBody.getBytes()); 
out.flush(); 

int responseCode = urlConnection.getResponseCode(); 
System.out.println("HTTPS RESPONSE CODE: " + responseCode); 

out.close(); 

DÜZENLEME: Bu bir hata olmalı ... ayıklayıcı açıkça true bunu ayarlıyorum bile sahte setDoOuput üye değişkeni gösterir. Bu ayarlanmadı!

+0

'verb' nedir? Ve aslında bir GET isteği ve bir POST değil, aslında doğruladı mı? – dylan7

+0

fiil "POST" değeriyle aktarılıyor. Bunu nasıl doğrulayabilirim? Yanıt kodu 400 döndürüyor, ancak kötü bir GET isteği veya kötü bir POST isteğinin olup olmadığından emin değilim. – ShrimpCrackers

+0

Aşağıdaki URL'yi deneyin URL url = new URL (address); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setDoOutput (true); urlConnection.setRequestProperty ("İçerik Türü", ...); OutputStream outputStream = new BufferedOutputStream (urlConnection.getOutputStream()); BufferedWriter yazıcı = yeni BufferedWriter (yeni OutputStreamWriter (outputStream, "utf-8")); writer.write (requestBody); writer.flush(); writer.close(); outputStream.close(); – BNK

cevap

0

POST fiilini kullanmak ve isteğinizle veri göndermek istiyorsanız urlConnection.setDoInput(true);'u kullanmanız gerekir. Bağlantı kurulmadan önce

http://developer.android.com/reference/java/net/URLConnection.html#setDoInput(boolean)

Bu ayarlanmalıdır.

+0

Çalışmıyor. Dokümanlar: "Bir web sunucusuna veri yüklemek için setDoOutput (true) kullanarak çıktı bağlantısını yapılandırın." – ShrimpCrackers

+0

Doküman başına, varsayılan olarak –

0

Bu benim çalışma örneğidir:

url = new URL(requestURL); 

    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
    conn.setReadTimeout(15000); 
    conn.setConnectTimeout(15000); 
    conn.setRequestMethod("POST"); 
    conn.setDoInput(true); 
    conn.setDoOutput(true); 


    OutputStream os = conn.getOutputStream(); 
    BufferedWriter writer = new BufferedWriter(
      new OutputStreamWriter(os, "UTF-8")); 
    writer.write(getPostDataString(postDataParams)); 

    writer.flush(); 
    writer.close(); 
    os.close(); 
    int responseCode=conn.getResponseCode(); 
    Map<String, List<String>> mp = conn.getHeaderFields(); 

    if (responseCode == HttpsURLConnection.HTTP_OK) { 
     String line; 
     BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream())); 
     while ((line=br.readLine()) != null) { 
      response+=line; 
     } 
    } 
+0

olarak ayarlandığım çok garip bir sorun yaşıyorum. SetDoOutput (true) üzerinden adım atmak için debugger'ı kullandım. Üye değişkenin true olarak ayarlandığını görebiliyorum, ancak programın bu yöntemin dışına çıktığı an, doOutput hala yanlıştır! Burada neler oluyor? – ShrimpCrackers

+0

Bu çok garip. Kod snippet'imde bağlantı aramalarının sırasını deneyebilir misiniz? Önce requets yöntemini ayarlayın ve ardından girişi ve çıkışı ayarlayın. –

+0

Sadece denedim. Aynı şey. doOutput her zaman yanlıştır. setRequestMethod ("POST") ile bile, yöntem her zaman "GET" olur. Bu konuda – ShrimpCrackers