1、api
2、get和post
菜鸟教程:https://www.runoob.com/tags/html-httpmethods.html
Form 中的 get 和 post 方法,在数据传输过程中分别对应了 HTTP 协议中的 GET 和 POST 方法。二者主要区别如下:
1、Get 是用来从服务器上获得数据,而 Post 是用来向服务器上传递数据。
2、Get 将表单中数据的按照 variable=value 的形式,添加到 action 所指向的 URL 后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post 是将表单中的数据放在 form 的数据体中,按照变量和值相对应的方式,传递到 action 所指向 URL。
3、Get 是不安全的,因为在传输过程,数据被放在请求的 URL 中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post 的所有操作对用户来说都是不可见的。
4、Get 传输的数据量小,这主要是因为受 URL 长度限制;而 Post 可以传输大量的数据,所以在上传文件只能使用 Post(当然还有一个原因,将在后面的提到)。
5、Get 限制 Form 表单的数据集的值必须为 ASCII 字符;而 Post 支持整个 ISO10646 字符集。
6、Get 是 Form 的默认方法。
使用 Post 传输的数据,可以通过设置编码的方式正确转化中文;而 Get 传输的数据却没有变化。在以后的程序中,我们一定要注意这一点。
2.1、get
参数字符串(名称/值对)是在 GET 请求的 URL 中发送的:/test/demo_form.php?name1=value1&name2=value2
有关 GET 请求的其他一些注释:
GET 请求可被缓存
GET 请求保留在浏览器历史记录中
GET 请求可被收藏为书签
GET 请求不应在处理敏感数据时使用
GET 请求有长度限制
GET 请求只应当用于取回数据
public static void testGet(){
try {
String result = "";
//1.通过在 URL 上调用 openConnection 方法创建连接对象
URL url = new URL("https://qqlykm.cn/api/free/weather/get?key=&city=长沙");
//此处的urlConnection对象实际上是根据URL的请求协议(此处是http)生成的URLConnection类的子类HttpURLConnection,
//故此处最好将其转化为HttpURLConnection类型的对象
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//2.处理设置参数和一般请求属性
//2.1设置参数
//可以根据请求的需要设置参数
conn.setRequestMethod("GET"); //默认为GET 所以GET不设置也行
conn.setUseCaches(false);
conn.setConnectTimeout(5000); //请求超时时间
//2.2请求属性
//设置通用的请求属性 更多的头字段信息可以查阅HTTP协议
conn.setRequestProperty("content-type", "application/json");
conn.setRequestProperty("Accept", "application/json");
conn.setRequestProperty("charset", "utf-8");
//3.使用 connect 方法建立到远程对象的实际连接。
conn.connect();
//4.远程对象变为可用。远程对象的头字段和内容变为可访问。
//4.1获取HTTP 响应消息获取状态码
if (conn.getResponseCode() == 200) {
//4.2获取响应的头字段
Map<String, List<String>> headers = conn.getHeaderFields();
System.out.println(headers); //输出头字段
//4.3获取响应正文
BufferedReader reader = null;
StringBuffer resultBuffer = new StringBuffer();
String tempLine = null;
reader = new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8"));
while ((tempLine = reader.readLine()) != null) {
resultBuffer.append(tempLine);
}
//System.out.println(resultBuffer);
reader.close();
// result = new String(resultBuffer.toString().getBytes("GBK"),"GBK");
result = resultBuffer.toString();
}
System.out.println(result);
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
2.2、post
请注意,查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的:
POST /test/demo_form.php HTTP/1.1
Host: runoob.com
name1=value1&name2=value2
有关 POST 请求的其他一些注释:
POST 请求不会被缓存
POST 请求不会保留在浏览器历史记录中
POST 不能被收藏为书签
POST 请求对数据长度没有要求
URLConnection类,HttpURLConnection类的使用和总结
…%2522%257D&request_id=166159107216782184622360&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-5-51585755-null-null.142v42pc_rank_34_queryrelevant25,185v2control&utm_term=urlconnection%E7%B1%BB&spm=1018.2226.3001.4187