HttpURLConnection 方法总是 GET?
HttpURLConnection method is always GET?
如 Android 文档所示,我已设置 setDoOutPut(true);
以便连接发送为 POST
。但是,在调试器中,当我检查 HTTPURLConnection
方法成员时,它总是 GET
,即使在 setDoOutput(true) 之后甚至 setRequestMethod("POST")
。我是否以某种方式将其重置回 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();
编辑:这一定是个错误...调试器清楚地显示 setDoOuput 成员变量为 false,即使我将其设置为 true。未设置!
如果您希望使用 POST 动词并随请求发送数据,则需要使用 urlConnection.setDoInput(true);
。
http://developer.android.com/reference/java/net/URLConnection.html#setDoInput(boolean)
必须在建立连接前设置。
这是我的工作示例:
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;
}
}
如 Android 文档所示,我已设置 setDoOutPut(true);
以便连接发送为 POST
。但是,在调试器中,当我检查 HTTPURLConnection
方法成员时,它总是 GET
,即使在 setDoOutput(true) 之后甚至 setRequestMethod("POST")
。我是否以某种方式将其重置回 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();
编辑:这一定是个错误...调试器清楚地显示 setDoOuput 成员变量为 false,即使我将其设置为 true。未设置!
如果您希望使用 POST 动词并随请求发送数据,则需要使用 urlConnection.setDoInput(true);
。
http://developer.android.com/reference/java/net/URLConnection.html#setDoInput(boolean)
必须在建立连接前设置。
这是我的工作示例:
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;
}
}