【发布时间】:2014-10-13 02:16:01
【问题描述】:
我正在尝试使用HttpURLConnection 从服务器获取数据。该请求是一个GET 请求。但是,它总是返回状态码405(BAD_METHOD)。下面是我写的方法:
URL url2 = new URL("http://www.example.com/api/client_list?");
HttpURLConnection connection = (HttpURLConnection) url2
.openConnection();
connection.setRequestMethod("GET");
connection.setReadTimeout(NET_READ_TIMEOUT_MILLIS);
connection.setConnectTimeout(CONNECTION_TIMEOUT_MILLIS);
connection.setRequestProperty("Authorization", token);
connection.setDoInput(true);
connection.setDoOutput(true);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("client_id", clientRole));
OutputStream os = connection.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(getQuery(params));
writer.flush();
writer.close();
connection.connect();
getQuery()
private String getQuery(List<NameValuePair> params)
throws UnsupportedEncodingException {
StringBuilder result = new StringBuilder();
boolean first = true;
for (NameValuePair pair : params) {
if (first)
first = false;
else
result.append("&");
result.append(URLEncoder.encode(pair.getName(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(pair.getValue(), "UTF-8"));
}
return result.toString();
}
如果使用HttpClient 执行相同的操作,我会得到所需的输出。下面是和HttpClient一样的操作
String url = "http://www.example.com/api/client_list?client_id=" + rolename;
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
httpGet.setHeader("Authorization", "Bearer " + token);
httpClient.execute(httpGet);
我没有得到 HttpUrlConnection 做错了什么。
【问题讨论】:
-
第一个代码中sn -p
getQuery()属于什么包? -
确保在
connection.setDoInput(true);和connection.setDoOutput(true);之前调用connection.setRequestMethod("GET");。否则,您是在告诉 HttpURLConnection 在建立连接后执行 GET。 -
我很确定 setDoInput(true) 会导致方法设置为 POST。
-
@PM77-1 发布
getQuery()。请检查。它是一个向 url 添加参数的实用程序。 -
我认为您需要从网址中删除
?
标签: java get httpurlconnection