1.几种常见的网络请求方式
-
GET: 请求指定的页面信息,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
-
HEAD: 只请求页面的首部,HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息,用于检查对象是否存在,以及得到对象的元数据。
-
POST: 向服务器提交数据,请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
-
PUT: 从客户端向服务器传送的数据取代指定的文档的内容,PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。
-
DELETE: 请求服务器删除指定的页面或某一个资源。
-
OPTIONS: 允许客户端查看服务器的性能。
-
TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。
-
PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别,用于部分文档更改。
-
MOVE: 请求服务器将指定的页面移至另一个网络地址。
-
COPY: 请求服务器将指定的页面拷贝至另一个网络地址。
-
LINK: 请求服务器建立链接关系。
-
UNLINK: 断开链接关系。
-
WRAPPED: 允许客户端发送经过封装的请求。
-
Extension-mothed:在不改动协议的前提下,可增加另外的方法
根据HTTP协议的设计初衷,不同的方法对资源有不同的操作方式
-
PUT :增
-
DELETE :删
-
POST:改
-
GET:查
提示:最常用的是GET和POST(实际上GET和POST都能做到增删改查)
GET和POST的区别使用:
- 如果要传递大量数据,比如文件上传,只能用POST请求
- GET的安全性比POST要差些,如果包含机密\敏感信息,建议用POST
- 如果仅仅是索取数据(数据查询),建议使用GET
- 如果是增加、修改、删除数据,建议使用POST
2.使用HttpURLConnection进行网络请求的过程:
Uses of this class follow a pattern:
-
Obtain a new HttpURLConnection by calling URL.openConnection() and casting the result to HttpURLConnection.
-
Prepare the request. The primary property of a request is its URI. Request headers may also include metadata such as credentials, preferred content types, and session cookies.
-
Optionally upload a request body. Instances must be configured withsetDoOutput(true) if they include a request body. Transmit data by writing to the stream returned by getOutputStream() .
-
Read the response. Response headers typically include metadata such as the response body’s content type and length, modified dates and session cookies. The response body may be read from the stream returned by getInputStream() . If the response has no body, that method returns an empty stream.
-
Disconnect. Once the response body has been read, the HttpURLConnection should be closed by calling disconnect() . Disconnecting releases the resources held by a connection so they may be closed or reused.
从上述使用描述中,可以知道,用户要根据返回的outputStream向服务器端写数据;而读数据的时候,要根据服务器端返回的inputStream,从这个输入流中读取服务器端返回的数据。所以,传递数据,通过返回的输出流;读数据,要通过返回的输入流。这些都是暴露给用户使用。相对于HttpClient,还要底层些。
3.GET和POST的区别
form提交的第一步是创建数据集,并根据 ENCTYPE 指定的类型值对数据集进行编码。 ENCTYPE 有两个值:multipart/form-data,application/x-www-form-urlencoded(默认值)。form提交的第二步是进行数据传输。对于GET方法,数据集使用application/x-www-form-urlencoded编码;而对于POST方法,数据集的 ENCTYPE 可以指定。
4.Android中的网络请求示例代码——Coding
4.1 Get请求
// Get方式请求
public static void requestByGet() throws Exception {
String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android";
// 新建一个URL对象
URL url = new URL(path);
// 打开一个HttpURLConnection连接
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
// 设置连接超时时间
urlConn.setConnectTimeout(5 * 1000);
// 开始连接
urlConn.connect();
// 判断请求是否成功
if (urlConn.getResponseCode() == HTTP_200) {
// 获取返回的数据
byte[] data = readStream(urlConn.getInputStream());
Log.i(TAG_GET, "Get方式请求成功,返回数据如下:");
Log.i(TAG_GET, new String(data, "UTF-8"));
} else {
Log.i(TAG_GET, "Get方式请求失败");
}
// 关闭连接
urlConn.disconnect();
}
4.2 Post请求
// Post方式请求
public static void requestByPost() throws Throwable {
String path = "https://reg.163.com/logins.jsp";
// 请求的参数转换为byte数组
String params = "id=" + URLEncoder.encode("helloworld", "UTF-8")
+ "&pwd=" + URLEncoder.encode("android", "UTF-8");
byte[] postData = params.getBytes();
// 新建一个URL对象
URL url = new URL(path);
// 打开一个HttpURLConnection连接
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
// 设置连接超时时间
urlConn.setConnectTimeout(5 * 1000);
// Post请求必须设置允许输出
urlConn.setDoOutput(true);
// Post请求不能使用缓存
urlConn.setUseCaches(false);
// 设置为Post请求
urlConn.setRequestMethod("POST");
urlConn.setInstanceFollowRedirects(true);
// 配置请求Content-Type
urlConn.setRequestProperty("Content-Type",
"application/x-www-form-urlencode");
// 开始连接
urlConn.connect();
// 发送请求参数
DataOutputStream dos = new DataOutputStream(urlConn.getOutputStream());
dos.write(postData);
dos.flush();
dos.close();
// 判断请求是否成功
if (urlConn.getResponseCode() == HTTP_200) {
// 获取返回的数据
byte[] data = readStream(urlConn.getInputStream());
Log.i(TAG_POST, "Post请求方式成功,返回数据如下:");
Log.i(TAG_POST, new String(data, "UTF-8"));
} else {
Log.i(TAG_POST, "Post方式请求失败");
}
}
5.Java项目中的网络请求示例(聚合数据demo)
1 | package com.pxy.test; |
赞赏一下