HttpClient的使用(模拟登录)


HttpClient是专门设计用来简化HTTP客户端与服务器间各种通信,编程的,可以使复杂的事情变得简单。

注意: 在Android SDK编译版本为23的时,且使用HTTPClient相关类库项目的时候,如使用HttpClient会出现无法解析的错误, 这是由于android 6.0 API 23) 不在提供 org.apache.http .* (只保留几个类

HTTP请求方法中最常见的方法为 GET 与 POST: 

GET 方法:

GET方法要求服务器将URL定位的资源放在想用报文的数据部分,会送给客户端,使用GET方法时,请求参数和对应的值附加在URL后面,利用一个(“?”)代表URL的结尾与请求参数的开始。

GET 方式特点:GET方式是不安全的 ,因为在传输过程中数据被放在请求的URL中,而如今现有的很多服务器代理服务器或者用户代理都会将请求URL记录到日志文件中,然后存放在某处, 这样一些隐私信息就可能会被第三方看到。

GET传输的数据两是有限的,主要受URL的限制,但是其传输速度快。

下面举例说明HTTpClient GET 的使用过程。

《 因为Android 中不允许在UI线程中进行耗时的操作,因此访问网路操作要放在工作线程中》

private void getRequest() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                String path = "http://192.168.56.1:8080/HelloServlet/LoginServlet?username=wang&password=1234";
             // 创建请求对象
                HttpGet httpGet = new HttpGet(path);
                // 创建Http客户端对象,用于实现发送请求
                HttpClient client = new DefaultHttpClient();
                try {
                    // 向服务器发送请求并返回响应对象
                    HttpResponse response =client.execute(httpGet);
                    // 获取响应的状态码
                    int staus= response.getStatusLine().getStatusCode();
                   switch (staus){
                     case HttpStatus.SC_OK://200
                        // 获取结果实体
                        HttpEntity entity= response.getEntity();
                         String result= EntityUtils.toString(entity, "utf-8");
                         System.out.println(result);
                         break;
                       case HttpStatus.SC_NOT_FOUND:// 404
                           break;
                       case HttpStatus.SC_INTERNAL_SERVER_ERROR:// 服务器异常(状态码500
                          break;
                   }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}

POST方式:POST方法要求被请求服务器接收请求的数据,常用于提交表单,当客户端给服务器提供信息较多时可以使用POST方法,POST方法将请求参数封装在HTTP请求数据中,以名称值得形式出现,可以传输大量数据但是速度慢。并且是安全的。

实例如下:(模仿用户注册的一个过程,将其写在一个方法中)

private void postRequest() {
new Thread(new Runnable() {
    @Override
    public void run() {
        String path = "http://192.168.56.1:8080/HelloServlet/LoginServlet";
       // 创建请求对象
        //get的差别在于传递参数的时候使用对NameValuePair
        HttpPost post = new HttpPost(path);
        ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("username","wang"));
        params.add(new BasicNameValuePair("password","1234"));
        try {
            HttpEntity entity = new UrlEncodedFormEntity(params);
            post.setEntity(entity);
            HttpClient client = new DefaultHttpClient();
            HttpResponse responce = client.execute(post);
            switch (responce.getStatusLine().getStatusCode()){ // 对服务器返回的状态码进行判断
                case HttpStatus.SC_OK:
                   String result = EntityUtils.toString(responce.getEntity(),"utf-8");
                    System.out.println(result);
                break;
                case HttpStatus.SC_NOT_FOUND:
                    Log.i("HttpClient------->","404");
                break;
                case HttpStatus.SC_INTERNAL_SERVER_ERROR:
                    Log.i("HttpClient------->","500");
                    break;
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}).start();
}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值