当前位置:K88软件开发文章中心编程语言APP编程Android01 → 文章内容

7.1.4 Android HTTP请求方式:HttpClient

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-12 6:26:44

本节引言:在上一节中我们对HttpURLConnection进行了学习,本节到第二种方式:HttpClient,尽管被Google弃用了,但是我们我们平时也可以拿HttpClient来抓下包,配合Jsoup解析网页效果更佳!HttpClient用于接收/发送Http请求/响应,但不缓存服务器响应,不执行HTML页面潜入的JS代码,不会对页面内容进行任何解析,处理!开始本节内容!1.HttpClient使用流程基本流程:2.HttpClient使用示例1)使用HttpClient发送GET请求直接贴下简单的发送Get请求的代码:public class MainActivity extends Activity implements OnClickListener { private Button btnGet; private WebView wView; public static final int SHOW_DATA = 0X123; private String detail = ""; private Handler handler = new Handler() { public void handleMessage(Message msg) { if(msg.what == SHOW_DATA) { wView.loadDataWithBaseURL("",detail, "text/html","UTF-8",""); } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); setView(); } private void initView() { btnGet = (Button) findViewById(R.id.btnGet); wView = (WebView) findViewById(R.id.wView); } private void setView() { btnGet.setOnClickListener(this); wView.getSettings().setDomStorageEnabled(true); } @Override public void onClick(View v) { if (v.getId() == R.id.btnGet) { GetByHttpClient(); } } private void GetByHttpClient() { new Thread() { public void run() { try { HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet("http://www.w3cschool.cc/python/python-tutorial.html"); HttpResponse httpResponse = httpClient.execute(httpGet); if (httpResponse.getStatusLine().getStatusCode() == 200) { HttpEntity entity = httpResponse.getEntity(); detail = EntityUtils.toString(entity, "utf-8"); handler.sendEmptyMessage(SHOW_DATA); } } catch (Exception e) { e.printStackTrace(); } }; }.start(); }}运行截图另外,如果是带有参数的GET请求的话,我们可以将参数放到一个List集合中,再对参数进行URL编码,最后和URL拼接下就好了:List<BasicNameValuePair> params = new LinkedList<BasicNameValuePair>(); params.add(new BasicNameValuePair("user", "猪小弟")); params.add(new BasicNameValuePair("pawd", "123"));String param = URLEncodedUtils.format(params, "UTF-8"); HttpGet httpGet = new HttpGet("http://www.baidu.com"+"?"+param);2)使用HttpClient发送POST请求POST请求比GET稍微复杂一点,创建完HttpPost对象后,通过NameValuePair集合来存储等待提交的参数,并将参数传递到UrlEncodedFormEntity中,最后调用setEntity(entity)完成,HttpClient.execute(HttpPost)即可;这里就不写例子了,暂时没找到Post的网站,又不想自己写个Servlet,So,直接贴核心代码吧~核心代码:private void PostByHttpClient(final String url){ new Thread() { public void run() { try{ HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("user", "猪大哥")); params.add(new BasicNameValuePair("pawd", "123")); UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params,"UTF-8"); httpPost.setEntity(entity); HttpResponse httpResponse = httpClient.execute(httpPost); if (httpResponse.getStatusLine().getStatusCode() == 200) { HttpEntity entity2 = httpResponse.getEntity(); detail = EntityUtils.toString(entity2, "utf-8"); handler.sendEmptyMessage(SHOW_DATA); } }catch(Exception e){e.printStackTrace();} }; }.start();}3.HttpClient抓数据示例(教务系统数据抓取)其实关于HttpClient的例子有很多,比如笔者曾经用它来抓学校教务系统上学生的课程表:这就涉及到Cookie,模拟登陆的东西,说到抓数据(爬虫),一般我们是搭配着JSoup来解析抓到数据的,有兴趣可以自己查阅相关资料,这里贴下笔者毕设app里获取网页部分的关键代码!大家可以体会下:HttpClient可以通过下述代码获取与设置Cookie:HttpResponse loginResponse = new DefaultHttpClient().execute(getLogin);获得Cookie:cookie = loginResponse.getFirstHeader("Set-Cookie").getValue();请求时带上Cookie:httpPost.setHeader("Cookie", cookie);//获得链接,模拟登录的实现:public int getConnect(String user, String key) throws Exception { // 先发送get请求 获取cookie值和__ViewState值 HttpGet getLogin = new HttpGet(true_url); // 第一步:主要的HTML: String loginhtml = ""; HttpResponse loginResponse = new DefaultHttpClient().execute(getLogin); if (loginResponse.getStatusLine().getStatusCode() == 200) { HttpEntity ent

[1] [2]  下一页


7.1.4 Android HTTP请求方式:HttpClient