HttpURLConnection HttpClient AsyncHttpClient 实现Post或者Get方式登陆

HttpURLConnection登陆

get方式登陆
1,将用户名和密码封装在url中,并对用户名编码URLEncoder.encode(username)
2,设置请求方式conn.setRequestMethod("GET");
3,获取响应码,并判断
4,如果状态码为200,获取输入流,并转换为字符串
5,将字符串发送到主线程的handleMessage(Message msg)方法,因为网络,要添加权限,要在子线程
6,在主线程中创建handler成员变量,并重写handlerMessage,接收字符串,判断是否成功登陆
post方式登陆
1,将请求体里面的用户名和密码进行URL编码URLEncoder.encode(username),并封装成一个请求体字符串param
2,设置请求方式conn.setRequestMethod("POST");
3,设置可以将请求体参数写出,conn.setDoOutput(true);
4,获取字节输出流 并写请求体字符串写出,然后关闭流
5,获取响应码,并判断
6,如果是200,获取输入流,并转换为字符串
7,将字符串发送到主线程handleMessae(Message msg)方法中,因为网络,要添加权限,要在子线程
8,在主线程中创建handler成员变量 并重写handlerMessage接收字符串,并判断是否成功登陆
注意事项:
1,因为是网络登陆,网络请求要在子线程中,UI修改要放在主线程,通信使用Handler
2,因为是网络登陆,所以要添加INTERNET权限
3,post方式,因为有请求体,要先设置流可写,然后将封装后的请求体写出
4,用户名和密码在封装的时候,一定要要进行URL编码
5,在设置请求方式的时候一定要大写,conn.setRequestMethod("POST");

HttpClient

get方式登陆
1,将用户名和密码封装成一个路径,并对编码,URLEncoder.encode(username);
2,通过new DefaultHttpClient(),获取一个客户端对象httpclient
3,通过new HttpGet(),获取一个客户端请求对象httpget
4,通过httpclient.execute(httprequest),获取一个客户端响应对象httpresponse
5,通过httpresonse.getStatusLiine(),获取一个客户端状态行对象statusLine
6,通过statusLine.getStatuscode(),获取一个状态码
7,如果状态码为200,通过httpresponse.getEntity(),获取httpEntity对象
8,通过httpEntity.getContent(),获取输入流
9,将输入流转换为字符串
10,将字符串通过handler传送到主线程
11,在handleMessage方法中判断是否登陆成功
post方式登陆
1,定义一个请求路径字符串
2,通过new DefaultHttpClient(),获取一个客户端对象httpClient
3,通过new HttpPost() 获取一个客户端请求对象httppost
3,设置请求对象的请求体参数,httpRequest.setEntity(HttpEntity子类对象);
     1,创建一个泛型为 BasicNameValuePair的list集合,然后添加BasicNameValuePair对象
     2,创建两个BasicNameValuePair对象,list.add(new BasicNameValuePair("username",user));
     3,将list封装成URL编码的实体,HttpEntity requestEntity = new UrlEncodedFormEntity(list,"utf-8");
4,通过httpClient.execute(httppost),获取响应对象httpResponse
5,获取httpReponse的响应状态行statusLine
6,通过statusLine获取响应码
7,判断响应码,如果是200,通过响应获取响应实体 HttpEntity responseEntity = httpResponse.getEntity();
8,通过响应实体获取输入流 InputStream is = responseEntity.getContent();
9,将输入流转换为字符串,并通过handler发送到主线程的handleMessage(Message msg)方法
10,对主线程中接收的字符串进行判断,看是否登陆成功
注意事项:
1,因为是网络登陆,网络请求要在子线程中,UI修改要放在主线程,通信使用Handler
2,因为是网络登陆,所以要添加INTERNET权限
3,post方式,因为有请求体,要先设置流可写,然后将封装后的请求体写出
4,用户名和密码在封装的时候,一定要要进行URL编码,post中的编码,在UrlEncodedFormEntity(list,"utf-8")串设置 
5,http请求对象,是HttpGet或者HttpResponse

第三方AsyncHttpClient登陆

get方式登陆
1,将路径封装成一个字符串路径,并对用户名和密码进行URL编码,UrlEncoder.encode(username,"utf-8");
2,创建一个AsyncHttpClient对象,用于执行get或者post请求
3,执行get方法进行请求,参数一为字符串路径,参数二,AsyncHttpResponseHandler子类对象
    并重写onSuccess和onFailture方法
4,onSuccess方法中,输出成功登陆
post方式登陆
1,将抓包获取的请求路径封装成一个字符串
2,创建一个AsyncHttpClient对象,用于执行post请求
3,创建一个RequestParams params,并添加请求的两个参数键值对
    params.put("username",user);
    params.put("pwd",password);
4,执行post方法进行请求,参数一为字符串路径,参数二为请求参数对象,参数三为 AsyncHttpResponseHandler子类对象
    重写onSuccess和onFailure方法
5,在onSuccess方法中输出成功登陆

Post方式上传文件

HttpURLConnection 上传不可以
在HttpURLConnecition中,要使用post将请求体写出,但是抓包的请求体是乱码
    1,先设置连接可以写出conn.setDoOutput(true);
    2,如果是登陆,将用户名和密码封装成一个字符中请求体
    3,获取连接输出流,然后将请求体字符串输出
AsyncHttpClient
1,将要上传的文件路径封装成文件路径对象(只能上传手机上的文件,不能上传电脑上的文件)
2,创建一个AsyncHttpClient对象client
3,创建一个请求参数对象RequestParams params = new RequestParams();
4,添加参数,params.put("filename",file);
5,调用client.post("服务器请求路径",params,AsyncHttpResponseHandler的子类对象);
6,重写onSuccess和onFailture方法
注意事项:第一,一定要添加网络权限,第二因为是手机端只能上传手机上的文件
HttpClient
这个没有讲,应该也不行
文件上传的操作
使用AsyncHttpClient第三方源码
1,获取要上传文件 的路径并封装成file对象
2,创建一个AsyncHttpClient对象client
3,调用client的post方法
    第一个参数:path,抓包获取的服务器提交的路径
    第二个参数:params,RequestParams的对象,将请求的参数封装在params中,用户名,密码,提交的文件对象
    第三个参数:responseHandler,可以创建一个子类AsyncHttpResponseHandler的子类对象
        在onSuccess方法中,判断状态码,并给出相应的提示
注意事项:
    1,因为是AsyncHttpClient是异步的,所以可以在主线程中,不需要创建一个子线程
    2,因为是网络请求 一定要添加Internet权限
    3,服务器提交的地址,一定是IP地址,不能是用localhost之类的
    4,将文件往sdcard里面写的命令行
        电脑往手机写: adb push "filepath" /sdcard/;
        手机读sdcard文件: /sdcard/"filepath"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值