大家好,今天给大家带来的是网络协议的内容,主要介绍的是访问服务端的三种方式,总结来说是get,post,httpclient这三种方式,只要你能熟练掌握其中的一两种,对于访问服务端取数据的工作就会轻而易举的完成。好了,废话不多说,迫不及待的想开讲这篇内容了。
1.第一种方式:Get方式。
/**
* get方法,网址的形式
// http://192.168.32.181:8080/aa/video_login?account=aa&pwd=11
// webLogin=http://192.168.32.181:8080/aa/video_login
很清楚的看到get请求的网站是很有规律的,它主要是靠参数形式访问服务端,获取数据,不如说,这里有account,pwd,这两个参数是我们可以定义的,
我们可以充分利用这点,获取服务端的数据
*/
public static InputStream byGet(String account, String pwd, String webLogin)
throws Exception {
System.out.println("GET请求");
//创建StringBuffer连接器
StringBuilder sbStr = new StringBuilder();
//首先连接weblogin网址 webLogin=http://192.168.32.181:8080/aa/video_login
sbStr.append(webLogin);
sbStr.append("?account=");
//连接传过来的参数,因为传过来的是中文,编码,URLEncder.encode
sbStr.append(URLEncoder.encode(account, "utf-8"));
sbStr.append("&pwd=");
//连接客户端传过来的pwd值
sbStr.append(pwd);
//创建网络协议对象,参数是字符串
URL url = new URL(sbStr.toString());
//打开连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//设置连接超时时间
conn.setConnectTimeout(5000);
System.out.println(conn);
//设置请求方式,这里是get方式
conn.setRequestMethod("GET");
//getResponseCose请求码,HttpURLConnection.HTTP_OK表示200,当请求码为200时,是连网成功
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
//返回的是流,服务端和客户端是以流方式传递的
return conn.getInputStream();
}
return null;
}
2.第二种方式:Post方式
/**
* post:请求体
* 通过Post请求的步骤:
* 1. 设置请求的Url,开辟一个连接 : http://localhost:8080/web/video_login
* 2. 设置请求头 请求的内容类型: "Content-Type", "application/x-www-form-urlencoded"
* 请求体的长度 :Content-Length
* 3. 设置请求体 :account=android&pwd=1234
* 4. 在把请求体附送到服务端
5. 取返回的结果
*
*/
public static InputStream byPost(String account, String pwd, String webLogin)
throws Exception {
System.out.println("POST请求");
//1.设置请求的URL,开辟一个连接
URL url = new URL(webLogin);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//设置请求方式,连接超时时间
conn.setRequestMethod("POST");
conn.setConnectTimeout(5000);
//2.设置请求表头方式,是以form表单提交的
conn.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
//设置请求体,”account="+account+"&pwd"=pwd
String body = "account=" + URLEncoder.encode(account, "utf-8")
+ "&pwd=" + URLEncoder.encode(pwd, "utf-8");
System.out.println(body + "body");
//设置请求头内容,参数一:内容长度。参数二:内容值,是字符串
conn.setRequestProperty("Content-Length", body.getBytes().length + "");
//把请求发布到服务器
conn.setDoOutput(true);
//输出流写入数据
conn.getOutputStream().write(body.getBytes());
//取返回结果
if (conn.getResponseCode() == 200) {
return conn.getInputStream();
}
return null;
}
3.第三种方式:httpClient方式
public static InputStream byHttpClient(String account, String pwd,
String webLogin) throws Exception {
System.out.println("byHttpClient");
//1.准备一个httpClient客户端
HttpClient httpClient=new DefaultHttpClient();
//设置请求方式
HttpPost httpPost=new HttpPost(webLogin);
//3.设置请求体的内容
//设置请求体的参数,NameValuePair名值对,键值对
List<NameValuePair> params=new ArrayList<NameValuePair>();
//添加客户端的传过来的参数到List里
params.add(new BasicNameValuePair("account", account));
params.add(new BasicNameValuePair("pwd", pwd));
UrlEncodedFormEntity entity=new UrlEncodedFormEntity(params, "UTF-8");
//设置请求体
httpPost.setEntity(entity);
//执行请求,取得返回结果
HttpResponse httpResponse = httpClient.execute(httpPost);
//取得请求码getStatusLine.etStatusCode()
if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
//取得请求体,以流的方式返回
return httpResponse.getEntity().getContent();
}
return null;
}
今晚就到这了,相信大家看有所获。晚安。