今日得闲看了下Java的http请求相关类,做下笔记。
先看下代码:
URLConnection conn = null
URL u = new URL(url)
conn = u.openConnection()
//如果conn是HttpURLConnection对象的实例可以通过conn.setRequestMethod('POST') 设置请求方式
//设置允许读入和发送数据
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", String.valueOf(bytes.length ?: 0));
conn.setRequestProperty("Content-Language", "en-US");
conn.setConnectTimeout(timeout)
conn.setReadTimeout(timeout)
conn.setUseCaches(false);
//发送post数据
connection.getOutputStream().write(bytes)
connection.getOutputStream().flush()
//读取请求结果
InputStream is = connection.getInputStream()
reader = new BufferedReader(new InputStreamReader(is,encoding))
String line;
response = new StringBuilder();
while ((line = reader.readLine()) != null) {
response.append(line);
}
response.toString()
主要概念:URL、URLConnection、HttpURLConnection
URLConnection的实例均通过URL的openConnection()方法获取,常用的http请求返回HttpURLConnection实例。
URL对象会根据构造方法参数创建相应协议的URLStreamHandler对象并存入Hashtable handlers ,同时设置要使用的handler;handler的主要工作包括设置协议的默认端口号、调用 openConnection() 方法;URL类可支持多种网络协议,如http、https、ftp等。
URL类的openConnection()其实就是调用了sun.net.www.protocol.http.Handler的openConnection()方法创建HttpURLConnection实例,代码如下:
protected URLConnection openConnection(URL var1, Proxy var2) throws IOException {
return new HttpURLConnection(var1, var2, this);
}
- 发送post请求数据需要设置conn.setDoOutput(true) 和 conn.setDoInput(true)。