HttpURLConnection详解、JSON的使用

您所在的位置:网站首页 post发送json数据请求 HttpURLConnection详解、JSON的使用

HttpURLConnection详解、JSON的使用

2023-12-15 08:56| 来源: 网络整理| 查看: 265

1.Http网络请求方法

Http的请求方法代表了客户端想对服务器进行的操作,比如: POST、GET、HEAD、PUT、DELETE、TRACE、OPTIONS 。

常用的不过于CRUD四个。 增:PUT;删:DELETE;改: POST;查: GET。

1.1GET 与 POST

GET

向服务器请求数据,获取资源,在大部分网络请求中, GET方法非常常见,并且它具有幂等性。

GET请求没有请求体,对于GET请求的请求参数在URL后面加上一个"?"的后面,参数以 key=val ue

的形式。参数与参数之间使用"&"进行连接。

GET请求是通过 URL 传输参数的,所以GET请求可以传输的参数是有限的。

POST

用于向表单提交数据,传送的数据放在请求体中。

在POST请求中,请求参数放在请求体中,服务器会根据POST请求体中的参数创建一个页面,然后 返回给客户端。POST不具有幂等性。

 POST 与 GET 区别

1. 作用不同:GET 用于获取资源,而 POST 用于传输实体主体。

2. 参数位置不一样:GET 和 POST 的请求都能使用额外的参数,但是 GET 的参数是以查询字符串出 现在 URL 中,而 POST 的参数存储在实体主体中。但是并不是 POST 参数存储在实体主体中就认 为它的安全性更高,我们可以通过一些抓包工具如(Fiddler)查看。 在URL 只支持 ASCII 码,因此 GET 的参数中如果存在中文等字符就需要先进行编码。例如 中文 会 转换为 %E4%B8%AD%E6%96%87 ,而空格会转换为 %20 。POST 支持标准字符集。

3. 安全性:安全的 HTTP 方法不会改变服务器状态,也就是说它只是可读的。 GET 方法是安全的, 而 POST 却不是,因为 POST 的目的是传送实体主体内容,这个内容可能是用户上传的表单数据, 上传成功之后,服务器可能把这个数据存储到数据库中,因此状态也就发生了改变。

2 Http——HttpURLConnection详解 2.1Android设置网络权限

在AndroidManifest.xml中添加

2.2HttpURLConnection简介

在JDK的 java.net 包中已经提供了访问HTTP协议的基本功能的类:HttpURLConnection。 HttpURLConnection是Java的标准类,它继承自URLConnection,可用于向指定网站发送GET请求、 POST请求。

它在URLConnection的基础上提供了如下便捷的方法

int getResponseCode(); // 获取服务器的响应代码。

String getResponseMessage(); // 获取服务器的响应消息。

String getResponseMethod(); // 获取发送请求的方法。

void setRequestMethod(String method); // 设置发送请求的方法。

 2.3HttpURLConnection使用

使用GET方式访问HTTP

public class MainActivity extends AppCompatActivity { private TextView tv_text; private Button btn_get; String result = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv_text = findViewById(R.id.tv_text); test(); btn_get = findViewById(R.id.btn_get); btn_get.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { new Thread(new Runnable() { @Override public void run() { //获取要访问的URL try { URL url = new URL("https://api.vvhan.com/api/love?type=json"); //获取访问对象 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //设置请求参数 connection.setDoOutput(false); connection.setDoInput(true); //设置请求方式 connection.setRequestMethod("GET"); //设置缓存 connection.setUseCaches(true); //设置重定向 connection.setInstanceFollowRedirects(true); //设置超时时间 connection.setConnectTimeout(4000); //连接 connection.connect(); //获取响应码 int code = connection.getResponseCode(); if (code == 200) { BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); result = br.readLine(); } handler.sendEmptyMessage(0x111); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }).start(); } }); } private void test() { String result = "[{\"success\":true,\"id\":400,\"ishan\":\"你的侧脸应该制定为国家一级宝物。\"} \n," + "{\"success\":true,\"id\":300,\"ishan\":\"你的侧脸应该制定为国家一级宝物。\"} \n," + "{\"success\":true,\"id\":200,\"ishan\":\"你的侧脸应该制定为国家一级宝物。\"} \n]"; try { JSONArray array = new JSONArray(result); for (int i = 0; i < array.length(); i++) { try { JSONObject jsonObject = array.getJSONObject(i); boolean success = jsonObject.getBoolean("success"); int id = jsonObject.getInt("id"); String s = jsonObject.getString("ishan"); Log.i("array","success:"+success+",id:"+id+",ishan:"+s); } catch (JSONException e) { e.printStackTrace(); } } } catch (JSONException e) { e.printStackTrace(); } } Handler handler = new Handler(Looper.getMainLooper()){ @Override public void handleMessage(@NonNull Message msg) { super.handleMessage(msg); if (msg.what==0x111) { JSONObject object = null; try { object = new JSONObject(result); } catch (JSONException e) { e.printStackTrace(); } try { boolean success = object.getBoolean("success"); int id = object.getInt("id"); String s = object.getString("ishan"); tv_text.setText(s); } catch (JSONException e) { e.printStackTrace(); } } } }; }

使用POST方式访问HTTP

try { URL url = new URL(“”); //得到网络访问对象 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(ture); connection.setDoInput(true); //设置请求方式 connection.setRequestMethod("POST"); //是否使用缓存 connection.setUseCaches(true); // 设置此 HttpURLConnecti on 实例是否应该自动执行 HTTP 重定向 connection.setInstanceFollowRedirects(true); // 设置三秒 connection.setConnectTimeout(3000); //连接 OutputStream out=connection.getOutputStream(); out.write(param.getBytes()); out.flush(); connection.connect(); int code = connection.getResponseCode(); //如果返回码是200表示连接成功 if (code == 200) { BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; if ((line = reader.readLine()) != null) { result += line; } reader.close(); } //断开连接释放资源 connection.disconnect(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return result; 3 HttpURLConnection说明

HttpURLConnection对象不能直接构造,需要通过URL类中的openConnection()方法来获得。 对HttpURLConnection对象的配置都需要在connect()方法执行之前完成,因为connect()会根据

HttpURLConnection对象的配置值生成HTTP头部信息。

HttpURLConnection的connect()函数,实际上只是建立了一个与服务器的TCP连接,并没有实际 发送HTTP请求。 **HTTP请求实际上直到我们获取服务器响应数据(如调用getInputStream()、

getResponseCode()等方法)时才正式发送出去**。

HttpURLConnection是基于HTTP协议的,其底层通过socket通信实现。如果不设置超时 (timeout),在网络异常的情况下,可能会导致程序僵死而不继续往下执行。

HTTP正文的内容是通过OutputStream流写入的, 向流中写入的数据不会立即发送到网络,而是 存在于内存缓冲区中,待流关闭时,根据写入的内容生成HTTP正文。 调用getInputStream()方法时,返回一个输入流,用于从中读取服务器对于HTTP请求的返回信息

我们可以使用HttpURLConnection.connect()方法手动的发送一个HTTP请求,但是如果要获取

HTTP响应的时候,请求就会自动的发起,比如我们使用HttpURLConnection.getInputStream()方 法的时候,所以完全没有必要调用connect()方法。

4.JSON

Json(Javascript Object notation)作为一种轻量级的数据传输格式,在现代软件开发中广泛使用,采用完 全独立于语言的文本格式,具有可读性强、编写容易,更利于机器的解析与生成。

4.1JSON的结构

JSON具有以下这些表现形式

对象(JSONObject):

对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

JSONObject结构图

数组(JSONArray):

数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分 隔。JSON的使用

SONObject object=new JSONObject(result); JSONArray array=object.getJSONArray("data"); for (int i = 0; i < array.length(); i++) { JSONObject object1=array.getJSONObject(i); String title=object1.getString("title"); String desc=object1.getString("desc"); String pic=object1.getString("pic"); }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3