14.java http访问
Http访问
网络访问的两种方式:
GET:
1.默认的
2.向服务器端传递数据:
url?参数名=参数值&参数名=参数值
3.传递数据的大小受限
4.容易乱码
5.不安全
POST:
1.向服务器端传递数据:
写,客户端,将数据--》包裹--》服务器端
2.可以传递大量的数据
3.不容易乱码
4.数据安全
需求1:直接获取图片或音频资源
使用get就可以
需求2:用客户端程序模拟登录
客户端:提供用户名和密码,传给服务器,服务器接收,给客户端响应:判断是否登录成功,
Get方式:参数:追加到url后边
Post方式:
参数名=参数值&参数名=参数值。。。
访问:客户端程序-->网络访问:
方法一:JAVA官方推荐:HttpUrlConnection
1.客户端访问服务器直接获取数据资源:get请求
2.客户端传递数据给服务器,再获取响应:get/post
方法二:Apache,对网络访问进行了封装:提供的访问方式:HttpClient
1.客户端访问服务器直接获取数据资源:get请求
2.客户端传递数据给服务器,再获取响应:
get
post:数据通过流写给服务器:原理
apache:用httpEntity
客户端:
1.创建对象
2.创建请求方式:post
3.客户端将数据:
1.把数据封装到httpEntity中,
2.挂到httpPost请求对象上
4.httpCLient.execute(httppost)-->得到响应
。。。。
总结:网络访问:
1.JAVA官方推荐:HttpUrlConnection
操作步骤:
step1:提供访问的路径:
step2:需要创建URL对下
step3:从URL对象中打开连接:HttpUrlConnection
openConnect();--->UrlConnection
step4:参数的设置
connection.setConnectTimeOut(毫秒);
connection.setRequsetMethod("GET/POST");//
//1.参数字母都大写
//2.默认是get请求
//打开流:
connection.setDoInput(true);//打开输入流,用于读服务器的响应,
//默认为true
connecion.setDoOutput(true);//打开输出流,用于向服务器写数据
//默认为false
使用规则:
get:url?参数
post:涉及到先将数据传给服务器:
打开输出流,向服务器写数据
step5:获取响应的状态码:200
step6:获取相应的数据:使用io流的操作。
connecion.getInputStream()-->InputStream
step7:关闭连接
2.Apache封装的:HttpClient
step1:提供路径地址
step2:创建客户端对象:httpClient
step3:通过路径地址创建请求对象:HttpGet/HttpPost
step4:
post,有数据先传递给服务器
将要传递的数据,封装到NameValuePair中,加入list集合
构建HttpEntity对象,挂到post对象
step5:获取相应码:
httpResponse.getStateLine().getStateCode()==200
step6:从httpResponse,获取HttpEntity对象(服务器响应的数据)
httpResponse.getEntity()-->HttpEntity
step7:从HttpEntity中获取数据
方法一:使用IO流
httpEntity.getContent()-->InputStream
方法二:使用EntityUtils工具类
toByteArray()-->byte[]
toString()-->String
单词:
URL:将统一资源定位符封装为java的url对象
HttpUrlConnection:url的连接对象
HttpClient:客户端对象(接口)
DefaultHttpClient:(实现类)
HttpGet:get请求对象(类)
HttpPost:post请求对象(类)
HttpResponse:响应对象(接口)
HttpEntity:载体对象:用于传递数据(接口)
UrlEncodedFormEntity:(实现类)
EntityUtils:工具类(类)
NameValuePair:名值对(接口)
BasicNameValuePair:(实现类)
作业:意会,明天手写代码