2016-03-24 3 views
2

Как указано в документах для Android, я установил setDoOutPut(true); так, что соединение отправляется как POST. Однако в отладчике, когда я проверяю член метода HTTPURLConnection, он всегда GET, даже после setDoOutput (true) и даже setRequestMethod("POST"). Как-то вернуть его обратно в GET?Метод HttpURLConnection всегда GET?

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(); 

EDIT: Это должно быть ошибка ... отладчик показывает переменную-член setDoOuput ясно как ложное, даже когда я устанавливаю его к истине. Это не задано!

+0

Что такое 'verb'? И вы подтвердили, что он действительно делает запрос GET, а не POST? – dylan7

+0

Глагол передается со значением «POST». Как я могу это проверить? Код ответа возвращает 400, но я не уверен, что это плохой запрос GET или плохой запрос POST. – ShrimpCrackers

+0

Попробуйте следующее URL-адрес URL = новый URL-адрес (адрес); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setDoOutput (true); urlConnection.setRequestProperty («Content-Type», ...); OutputStream outputStream = new BufferedOutputStream (urlConnection.getOutputStream()); BufferedWriter writer = new BufferedWriter (новый OutputStreamWriter (outputStream, "utf-8")); writer.write (requestBody); writer.flush(); writer.close(); outputStream.close(); ' – BNK

ответ

0

Вам необходимо использовать urlConnection.setDoInput(true);, если вы хотите использовать глагол POST и отправить данные по вашему запросу.

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

Он должен быть установлен до установления соединения.

+0

Не работает. Документы говорят: «Чтобы загрузить данные на веб-сервер, настройте соединение для вывода с помощью setDoOutput (true)». – ShrimpCrackers

+0

Как и в doc, по умолчанию установлено значение true –

0

Это мой рабочий пример:

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

У меня очень странная проблема. Я использовал отладчик для выполнения setDoOutput (true). Я вижу, что переменной-члену присваивается значение true, но в тот момент, когда программа выходит за пределы этого метода, doOutput все еще ложна! Что здесь происходит? – ShrimpCrackers

+0

Это очень странно. Можете ли вы попробовать порядок вызовов conn в моем фрагменте кода? Сначала задайте метод запросов, а затем установите вход и выход. –

+0

Просто попробовал. То же самое. doOutput всегда ложно. даже с setRequestMethod («POST») метод всегда «GET». – ShrimpCrackers

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