HttpURLConnection和URLConnection的使用
介绍
Java网络连接(HttpURLConnection,URLConnection)
HttpURLConnection和URLConnection API
HttpURLConnection的API
方法名 | 返回类型 | 描述 |
---|---|---|
public void setRequestMethod(String method) |
void |
用于设置请求方式,例如GET,POST等 |
public void setRequestProperty(String key, String value) |
void |
用于设置请求头的属性,其中key是属性的名称,value是属性的值 |
public void setDoOutput(boolean dooutput) |
void |
用于设置是否向HttpURLConnection输出,如果是POST请求,必须设置为true |
public void setDoInput(boolean doinput) |
void |
用于设置是否从HttpURLConnection读入,如果是POST请求,必须设置为true |
public InputStream getInputStream() |
InputStream |
用于获取返回的数据,返回的是一个InputStream对象 |
URLConnection 的API
方法名 | 返回类型 | 描述 |
---|---|---|
public void setRequestProperty(String key, String value) |
void |
用于设置请求头的属性,其中key是属性的名称,value是属性的值 |
public InputStream getInputStream() |
InputStream |
用于获取返回的数据,返回的是一个InputStream对象 |
案例
以下是一个使用HttpURLConnection进行GET请求的例子,注释详细解释了每一步的操作:
public class ConnectionUtil {
private String url;
public ConnectionUtil(String url) {
this.url = url;
}
public BufferedReader getBufferedWriter(ConnectionMethod method, Map<String, String> map) {
try {
// 如果有查询参数,将其附加到url后面
if (map != null) {
boolean verify = true;
for (String key : map.keySet()) {
url += (verify ? "?" : "&") + key + "=" + map.get(key);
verify = false;
}
}
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
conn.setRequestMethod(method.value);
// 设置请求头的属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
// 对于POST请求,需要设置DoOutput和DoInput为true
if (ConnectionMethod.POST == method) {
conn.setDoOutput(true);
conn.setDoInput(true);
}
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
return reader;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
@AllArgsConstructor
public enum ConnectionMethod {
GET("GET"),POST("POST");
String value;
}
注意事项
- 在使用
HttpURLConnection
进行网络连接时,我们需要处理异常,因为网络连接可能因为各种原因出现问题,我们需要捕获这些异常并进行适当的处理。 - 当我们设置请求方法为POST时,需要设置
DoOutput
和DoInput
为true,否则可能导
致请求失败。
- 在设置请求属性时,我们需要知道各个属性的含义,例如
accept
表示客户端接受的MIME类型,connection
表示是否持久连接,user-agent
表示用户代理,即浏览器版本等信息,Content-Type
表示发送信息至服务器的内容类型。对这些属性的理解有助于我们设置正确的请求头。