答:一种多用途、轻量极的HTTP客户端,使用它来进行HTTP操作可以适用于大多数的应用程序。
HttpURLConnection提供的API比较简单,但这同时也使得我们可以更加容易地去使用和扩展它。继承自 URLConnection,抽象类,无法直接实例化对象。通过调用openCollection() 方法获得对象实例,默认是带gzip压缩的;
- 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; } }