http://blog.csdn.net/yijincoldplay/article/details/8275986
ps:以下内容来自对李刚的《疯狂Android讲义》的学习
URL 的openConnection()方法返回一个URLConnection对象,此对象代表程序与URL的通信连接,程序可以通过URLConnection对象向此URL发送请求,读取此URL代表的远程资源。
通常创建一个和URL对象的远程连接,发送请求并读取远程资源有下面4个步骤。
1通过URL 的openConnection()方法创建一个URLConnection对象;
2设置URLConnection的参数和请求属性
3如果是发送的是get请求,使用connect方法建立与远程资源的实际连接即可;如果发送的是post请求,则需要URLConnection实例对应的输出流来发送参数。
4远程资源变为可用,程序可以访问远程资源的头字段,或者通过输入流读取远程资源。
在建立与远程资源的实际连接之前,可以使用以下方法设置请求头字段:
setAllowUserInteraction:设置allowUserInteraction头字段的值,如果为 true,则在允许用户交互(例如弹出一个验证对话框)的上下文中对此 URL 进行检查。
setDoInput:设置doInput头字段的值,如果为true,则这个URLConnection对象允许输入
setDoOutput:设置doOutput头字段的值,如果为true,则这个URLConnection对象允许输出
setUseCaches:设置useCaches头字段的值,如果为true,则使用缓存cache
setIfModifiedSince;设置If-Modified-Since头字段的值,值类型为datatime,表明如果这个时间之后资源被修改了,服务器就会返回给客户端最新的
setRequestProperty(String key,String value):设置通用头字段,各字段的代表的意义请看http协议。
addRequestProperty(String key,String value):为key请求的头字段增加value值,该方法不会覆盖原头字段的值,而是将新值加在上面。
当资源可用时可以用以下方法访问头字段与内容。
- public StringgetHeaderField(String name)
得到指定头域的名称。 - public ObjectgetContent() throws IOException
得到URL连接的内容。该方法会先调用getContentType方法得到对象的内容类型,再做相应的处理。 - public InputStream getInputStream() throws IOException
- public OutputStream getOutputStream()throws IOException
得到URLConnection的输入或输出流。
- public URLgetURL()
得到URLConnection对象的URL域。 - public intgetContentLength()
得到content-type头域的值。 - public StringgetContentEncoding()
得到content-encoding头域的值。 - public longgetDate()
得到date头域的值。 - public longgetLastModified()
得到last-modified头域的值。 - public long getExpiration()
得到expiration头域的值。
public static String sendGet(String url)
{
BufferedReader in=null;
String result = "";
try
{
URL theURL=new URL(url);
URLConnection conn=theURL.openConnection();
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Charset", "UTF-8");
conn.connect();
in=new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while((line=in.readLine())!=null)
{
result+=line+"\n";
}
}
catch (MalformedURLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
if(in!=null)
{
try
{
in.close();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return result;
}
使用URLConnection发送post请求
public static String sendPost(String url,String params)
{
BufferedReader in=null;
PrintWriter out=null;
String result = "";
try
{
URL theURL=new URL(url);
URLConnection conn=theURL.openConnection();
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Charset", "UTF-8");
//发送post请求必须设置以下两行
conn.setDoInput(true);
conn.setDoOutput(true);
//获取URLConnection对应的输出流并发送参数
out=new PrintWriter(conn.getOutputStream());
out.print(params);
//flush输出流的缓存
out.flush();
in=new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while((line=in.readLine())!=null)
{
result+=line+"\n";
}
}
catch (MalformedURLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
if(in!=null)
{
try
{
in.close();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(out!=null)
{
out.close();
}
}
return result;
}
可知,发送get请求只需要调用URLConnection方法的connect()方法建立实际的连接即可,而发送post请求则需要获取URLConnection的OutputStream.然后向网络中输出请求参数
深入理解http协议:http://www.blogjava.net/zjusuyong/articles/304788.html
http缓存介绍:http://blog.csdn.net/nkorange/article/details/7891645