2014-02-06 2 views
1

Мне нужно сообщениеschoolname=xyz&schoolid=1234 к серверу. Я написал следующий Android код клиента:Отсутствует параметр при отправке запроса на сервер с HttpURLConnection

String data = "schoolname=xyz&schoolid=1234"; 

//The url is correct 
HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
conn.setRequestMethod("POST"); 
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
conn.setRequestProperty("Accept-Encoding", "gzip"); 
conn.setDoInput(true); 
conn.setDoOutput(true); 
OutputStream os = new BufferedOutputStream(conn.getOutputStream()); 
os.write(data.toString().getBytes("UTF-8")); 

//response complains that missing parameter 'schoolname' 
int responseCode = conn.getResponseCode(); 
... 

После того как я отправить мой запрос с кодом выше, сервер, однако постоянно жалуется, что schoolname параметр отсутствует. Что я пропустил или сделал не так?

ответ

1

я понял сам, причина в том, что я забыл назвать flush() на выходном потоке. После флеша все работает нормально.

+0

Вы должны не только 'flush()', но и 'close()' ваши потоки. – hgoebl

+0

Конечно, я закрыл его, просто не упомянул об этом в моем вопросе. Но спасибо. –

1

Вы не можете использовать формат «key = value & key1 = value1» для http post. Это будет отлично работать только для получения. В этом случае вам нужно что-то вроде этого:

List<NameValuePair> nameValuePairs; 
nameValuePairs.add(new BasicNameValuePair("schoolname", "xyz")); 
nameValuePairs.add(new BasicNameValuePair("schoolid", "1234")); 
HttpPost httpPost = new HttpPost(url); 
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8")); 
httpPost.execute(); 
Смежные вопросы