1.HttpURLConnection的介绍
答:一种多用途、轻量极的HTTP客户端,使用它来进行HTTP操作可以适用于大多数的应用程序。
HttpURLConnection提供的API比较简单,但这同时也使得我们可以更加容易地去使用和扩展它。继承自 URLConnection,抽象类,无法直接实例化对象。通过调用openCollection() 方法获得对象实例,默认是带gzip压缩的;
2.HttpURLConnection的使用步骤
- 1.创建一个URL对象:
URL url = new URL(http://www.baidu.com);- 2.调用URL对象的openConnection( )来获取HttpURLConnection对象实例:
HttpURLConnection hrc= (HttpURLConnection) url.openConnection();- 3.设置HTTP请求使用的方法:GET或者POST,或者其他请求方式比如:PUT
hrc.setRequestMethod(“GET”);- 4.设置连接超时,读取超时 的毫秒数,以及服务器希望得到的一些消息头
hrc.setConnectTimeout(6*1000);
hrc.setReadTimeout(6 * 1000);- 5.调用getInputStream()方法获得服务器返回的输入流,然后输入流进行读取了
InputStream in = conn.getInputStream();- 6. 对输入流进行处理
- 7.最后调用disconnect()方法将HTTP连接关掉
hrc.disconnect();
PS: 除了以上外,有时还可能需要对响应码进行判断,比如200:
if(conn.getResponseCode() != 200)
{
//处理接收到的数据
}
还有,可能有时并不需要传递什么参数,而是直接去访问一个页面,可以直接用:
final InputStream in = new URL(“url”).openStream();
然后直接读流.
不过这个方法适合于直接访问页面的情况,底层实现其实也是 return openConnection().getInputStream(),
而且还不能设置一些 请求头的东东.
eg.
<pre name="code" class="java">package com.exe.webtest;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Menu;
import android.webkit.WebView;
import android.widget.Toast;
public class HRCActivity extends Activity {
private String tag="wei";
private WebView wv;
private String web_target;
private HttpURLConnection hrc;
private String html;
private Handler myHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
if(msg.what==0x01){
Log.e(tag, "HRC receive msg");
wv.loadDataWithBaseURL("", html, "text/html", "UTF-8", "");
Toast.makeText(HRCActivity.this, "网页加载完毕", Toast.LENGTH_SHORT).show();
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_hrc);
Log.e(tag, "HRC onCreate");
wv=(WebView)findViewById(R.id.webView1);
web_target=new String("http://www.baidu.com");
new Thread(){
public void run() {
try {
URL url=new URL(web_target);
hrc=(HttpURLConnection)url.openConnection();
hrc.setRequestMethod("GET");
hrc.setConnectTimeout(5000);
hrc.setReadTimeout(5000);
InputStream in=hrc.getInputStream();
byte[] buf=new byte[1024];
int len=0;
ByteArrayOutputStream bos=new ByteArrayOutputStream();
while( ( len=in.read(buf) )!=-1){
Log.e("wei", "len is: "+len);
bos.write(buf, 0, len);
}
in.close();
html = new String(bos.toByteArray(), "UTF-8");
Log.e(tag, "HRC send msg");
myHandler.sendEmptyMessage(0x01);
} catch (Exception e) {
e.printStackTrace();
}finally{
hrc.disconnect();
}
}
}.start();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}