10.安卓逆向-安卓开发基础-api服务接口设计1

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

内容参考于:图灵Python学院

本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:9.安卓逆向-安卓开发基础-安卓四大组件2

前面的都是ui界面开发,接下来开始安卓网络开发的部分

请求

安卓中通常会使用OkHttp3库(框架)来处理HTTP请求、处理响应以及与服务器进行通信。

以下是OkHttp3的一些主要特点和功能:

  1. 简单易用:OkHttp3 提供了简洁的 API,使得发送HTTP 请求变得简单和直观。它支持常见的 HTTP方法(GET、POST、PUT、DELETE等)和请求参数的设置,可以轻松构建出各种类型的请求。
  2. 高效性能:OkHttp3针对性能进行了优化,使用了连接池和请求复用等机制,减少了网络请求的延迟和资源消耗。它还支持 HTTP/2、SPDY和连接的压缩,提供更快的网络传输速度。
  3. 强大的拦截器:OkHttp3 提供了拦截器(Interceptor)机制,可以在发送请求和接收响应的过程中进行自定义的处理操作。你可以添加和配置多个拦截器,以实现日志记录、请求重试、请求头修改等功能。
  4. 支持异步请求:OkHttp3 支持发送异步请求,可以利用线程池并发地发送多个请求,从而提高请求的性能和吞吐量。同时,它还支持同步请求,即在当前线程中执行请求并等待返回结果。
  5. 文件上传和下载:OkHttp3 提供了方便的 API,用于实现文件的上传和下载功能。通过设置请求体和响应处理器,可以轻松地实现大文件的分块上传和断点续传等操作。
  6. 支持WebSocket:除了常见的 HTTP 请求,OkHttp3还支持使用WebSocket进行双向通信。它提供了WebSocket API,可以在应用程序中实现实时的消息推送和数据交互。

项目中使用OkHttp3

首先如下图添加

implementation 'com.squareup.okhttp3:okhttp:3.14.2' // 用于发送请求
implementation 'com.squareup.okio:okio:1.17.4'  // 用于快速的访问、存储和处理你的数据

然后添加了上面的代码,然后点击下图红框位置,点击之后它会把okhttp3的库下载下载,下载完就可以用了

然后开始使用:

首先创建一个空的Activity,如下图

然后添加下图红框的代码

package com.example.course1;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import java.io.IOException;import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;public class OkHttp3Dome extends AppCompatActivity {public OkHttpClient client = new OkHttpClient();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_ok_http3_dome);// 创建请求对象,也就是告诉OKHTTP3要访问的连接地址和参数是什么Request request = new Request.Builder().url("https://www.baidu.com") // 设置请求的 URL.build();// newCall请求地址,enqueue里面是请求成功还是失败client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) { // 请求失败会执行这个方法,一般服务器报错会来到这个方法中// 请求失败,处理错误e.printStackTrace();}@Overridepublic void onResponse(Call call, Response response) throws IOException { // 执行成功会执行这个方法// 请求成功,处理响应数据if (response.isSuccessful()) {String responseData = response.body().string();System.out.println(responseData);// 在这里处理响应数据} else {// 请求失败,处理错误// 可以根据 response.code() 判断具体的失败原因}}});}
}

然后还要修改一下清单文件

如果不添加下方的代码app无法联网,效果就是闪退

<uses-permission android:name="android.permission.INTERNET" />

点击运行之后就会打印百度的服务器返回的内容了,如下图

然后上图它没有换行自动换行可能看着不好,如下图点击下图蓝框可以超长自动换行

上方的例子是一个GET请求的实例,接下来写post请求的实例

首先要找一个post的链接,巨潮资讯网,下图红框的内容就是一个post请求,接下来通过OkHttp3访问这个请求,以下只是为了学习参考,不会做违法的事情,读者们也不要做违法的事情,不要对网链接进行大量请求导致网页无法正常运行

它的链接是,如下图按F12打开浏览器的控制台,然后找到Network,然后翻页,然后就能看到query了,如果看不到那就是网页更新了,就算更新了也会有类似query的链接

然后单击query,下图红框就是query的链接

下图红框就是query请求给服务器发送的参数(数据)

知道这些以后开始访问它

参数

post请求的请求头中需要添加一个Content-Type用来说明post请求参数的格式,如下图直接复制粘贴

package com.example.course1;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import java.io.IOException;import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;public class OkHttp3Dome extends AppCompatActivity {public OkHttpClient client = new OkHttpClient();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_ok_http3_dome);post请求();}public void get(){// 创建请求对象,也就是告诉OKHTTP3要访问的连接地址和参数是什么Request request = new Request.Builder().url("https://www.baidu.com") // 设置请求的 URL.build();// newCall请求地址,enqueue里面是请求成功还是失败client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) { // 请求失败会执行这个方法,一般服务器报错会来到这个方法中// 请求失败,处理错误e.printStackTrace();}@Overridepublic void onResponse(Call call, Response response) throws IOException { // 执行成功会执行这个方法// 请求成功,处理响应数据if (response.isSuccessful()) {String responseData = response.body().string();System.out.println(responseData);// 在这里处理响应数据} else {// 请求失败,处理错误// 可以根据 response.code() 判断具体的失败原因}}});}public void post请求(){// 创建请求对象,也就是告诉OKHTTP3要访问的连接地址和参数是什么FormBody formBody = new FormBody.Builder() // 构建给服务器发送的数据.add("pageNum","1").add("pageSize","30").add("column","szse").add("tabName","fulltext").add("plate","").add("stock","").add("searchkey","").add("secid","").add("category","category_gddh_szsh").add("trade","").add("seDate","2024-03-22~2024-09-23").add("sortName","").add("sortType","").add("isHLtitle","").build();Request request = new Request.Builder().url("http://www.cninfo.com.cn/new/hisAnnouncement/query") // 设置请求的 URL.post(formBody) // 设置post请求的请求参数(也就是通过post的方式给服务器发送的数据).addHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8")// 设置请求头.build();// newCall请求地址,enqueue里面是请求成功还是失败client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) { // 请求失败会执行这个方法,一般服务器报错会来到这个方法中// 请求失败,处理错误e.printStackTrace();}@Overridepublic void onResponse(Call call, Response response) throws IOException { // 执行成功会执行这个方法// 请求成功,处理响应数据if (response.isSuccessful()) {String responseData = response.body().string();System.out.println(responseData);// 在这里处理响应数据} else {// 请求失败,处理错误// 可以根据 response.code() 判断具体的失败原因}}});}
}

写完点运行会报下图的错,原因是安卓29版本(安卓api级别29)默认禁止访问http的api(api的意思是现在可以理解为安卓系统提供的一些可以让我们用的功能),需要设置一下让它允许访问

首先在清单文件中

 android:networkSecurityConfig="@xml/network_security_config"

然后点击下图红框在res文件夹里创建一个文件夹叫xml

然后点击XML Resource File

然后点击下图红框

然后输入下图红框的内容

<network-security-config><base-config cleartextTrafficPermitted="true" />
</network-security-config>

然后再点运行,就可以看到 http://www.cninfo.com.cn/new/hisAnnouncement/query 链接给返回的数据了

如下图可以看到一模一样

上方的实例是 application/x-www-form-urlencoded 类型,这个类型叫表单类型,上方用 FormBody 就是一个application/x-www-form-urlencoded 类型,FormBody 会把数据搞成application/x-www-form-urlencoded 类型,然后post常用的还有json类型,json与application/x-www-form-urlencoded可以说是一个东西

然后找一个json的post请求,如下图百度翻译采用的是post请求

它的参数

它返回的东西

开始写代码

package com.example.course1;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import org.json.JSONException;
import org.json.JSONObject;import java.io.IOException;import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;public class OkHttp3Dome extends AppCompatActivity {public OkHttpClient client = new OkHttpClient();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_ok_http3_dome);
//        post请求();json请求();}public void get(){// 创建请求对象,也就是告诉OKHTTP3要访问的连接地址和参数是什么Request request = new Request.Builder().url("https://www.baidu.com") // 设置请求的 URL.build();// newCall请求地址,enqueue里面是请求成功还是失败client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) { // 请求失败会执行这个方法,一般服务器报错会来到这个方法中// 请求失败,处理错误e.printStackTrace();}@Overridepublic void onResponse(Call call, Response response) throws IOException { // 执行成功会执行这个方法// 请求成功,处理响应数据if (response.isSuccessful()) {String responseData = response.body().string();System.out.println(responseData);// 在这里处理响应数据} else {// 请求失败,处理错误// 可以根据 response.code() 判断具体的失败原因}}});}public void post请求(){// 创建请求对象,也就是告诉OKHTTP3要访问的连接地址和参数是什么FormBody formBody = new FormBody.Builder() // 构建给服务器发送的数据.add("pageNum","1").add("pageSize","30").add("column","szse").add("tabName","fulltext").add("plate","").add("stock","").add("searchkey","").add("secid","").add("category","category_gddh_szsh").add("trade","").add("seDate","2024-03-22~2024-09-23").add("sortName","").add("sortType","").add("isHLtitle","").build();Request request = new Request.Builder().url("http://www.cninfo.com.cn/new/hisAnnouncement/query") // 设置请求的 URL.post(formBody) // 设置post请求的请求参数(也就是通过post的方式给服务器发送数据).addHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8")// 设置请求头.build();// newCall请求地址,enqueue里面是请求成功还是失败client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) { // 请求失败会执行这个方法,一般服务器报错会来到这个方法中// 请求失败,处理错误e.printStackTrace();}@Overridepublic void onResponse(Call call, Response response) throws IOException { // 执行成功会执行这个方法// 请求成功,处理响应数据if (response.isSuccessful()) {String responseData = response.body().string();System.out.println(responseData);// 在这里处理响应数据} else {// 请求失败,处理错误// 可以根据 response.code() 判断具体的失败原因}}});}public void json请求(){// 创建请求对象,也就是告诉OKHTTP3要访问的连接地址和参数是什么JSONObject json = new JSONObject();try {json.put("query", "pya");} catch (JSONException e) {e.printStackTrace();}// 创建请求体MediaType mediaType = MediaType.parse("application/json; charset=utf-8");RequestBody body = RequestBody.create(mediaType, json.toString());Request request = new Request.Builder().url("https://fanyi.baidu.com/langdetect") // 设置请求的 URL.post(body) // 设置post请求的请求参数(也就是通过post的方式给服务器发送的数据).build();// newCall请求地址,enqueue里面是请求成功还是失败client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) { // 请求失败会执行这个方法,一般服务器报错会来到这个方法中// 请求失败,处理错误e.printStackTrace();}@Overridepublic void onResponse(Call call, Response response) throws IOException { // 执行成功会执行这个方法// 请求成功,处理响应数据if (response.isSuccessful()) {String responseData = response.body().string();System.out.println(responseData);// 在这里处理响应数据} else {// 请求失败,处理错误// 可以根据 response.code() 判断具体的失败原因}}});}
}

效果图:


img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/149176.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

实战精选 | 5分钟利用 OpenVINO™ 部署 Qwen2.5

点击蓝字 关注我们,让开发变得更有趣 作者 | 杨亦诚 英特尔 AI 软件工程师 排版 | 吴紫琴 OpenVINO™ Qwen2.5 是阿里通义团队近期最新发布的文本生成系列模型&#xff0c;基于更富的语料数据集训练&#xff0c;相较于 Qwen2&#xff0c;Qwen2.5 获得了显著更多的知识&#xff…

HSD AIM915 916 芯片调试

在车机显示 系统中&#xff0c;AIM915X和AIM916X作为车机和显示屏之间的传输芯片&#xff0c;车机的LVDS视频信号传到显示屏&#xff1b;控制信号如I2C、GPIO可实现双向透传&#xff1b; 一、设备树 开发平台&#xff1a;IMX6D 1、设备节点 2、timing参数 二、分辨率 1、修改为…

通过企业微信群机器人 发送群消息

1、添加群机器人&#xff0c;复制的webhook地址 2、 public static void main(String[] args) { String reqUrl "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key6xdexxxxxxxxxxxxxxxxxxxxxxxxxxx"; String title "填…

FP7208:升压汽车车灯方案 高效稳定的电力支持

前言 近年来随着汽车的不断普及&#xff0c;车灯方面也在不断发展&#xff0c;车灯对于汽车不仅是外观件更是汽车主动安全的重要组成部分。灯光在保证照亮前部道路的同时&#xff0c;还要确保不对对面车辆产生眩目影响。同时需要针对不同路况和不同载荷引起的灯光偏离进行调整&…

入门数据结构JAVA DS——二叉树的介绍 (构建,性质,基本操作等) (1)

前言 二叉树的概念和性质 二叉树的基本概念 二叉树的种类 二叉树的性质 二叉树的构建存储与遍历 存储 构建 遍历 前序遍历 后序遍历 中序遍历 层序遍历 二叉树的基本操作 获取树中结点个数 获取叶子结点个数 获取第K层结点的个数 获取二叉树的高度 检测值为v…

【新书】从零构建大型语言模型,370页pdf

学习如何从零开始创建、训练和调整大型语言模型&#xff08;LLMs&#xff09; 在《从零构建大型语言模型》一书中&#xff0c;畅销书作者塞巴斯蒂安拉什卡&#xff08;Sebastian Raschka**&#xff09;将一步步指导你创建自己的LLM。每个阶段都有清晰的文字、图表和示例解释。…

【Python】生成dataframe的测试样例,用于测试一个或者多个dataframe

我们在处理dataframe测试时&#xff0c;发现&#xff0c;总需要重新构造一个新的dataframe&#xff0c;每次想找个现成的就想抓狂。 所以&#xff0c;为了方便随用随拿&#xff0c;我在这里直接保存一个直接生成dataframe 的方法。 1. 生成一个随机dataframe的方法&#xff1…

1688店铺装修模板1688店铺怎么装修1688装修模板1688店铺装修教程视频1688运营阿里巴巴店铺装修设计阿里店铺首页怎么装修产品分类效果

侧边栏装修效果&#xff0c;代码1688店铺怎么装修1688装修模板1688店铺装修教程视频1688运营阿里巴巴店铺装修设计阿里店铺首页怎么装修 工具是一秒美工助手

食家巷苦豆粉,香得很哟

苦豆粉&#xff0c;它看似普通&#xff0c;却承载着西北的厚重历史与浓郁风情。那一抹淡淡的绿色粉末&#xff0c;蕴含着大自然的馈赠和西北人民的智慧。 苦豆&#xff0c;这种生长在西北土地上的植物&#xff0c;经过精心研磨&#xff0c;变成了细腻的苦豆粉。它的味道独特&am…

python对文件的写入和追加

写入文件 1.打开文件 文件可以是不存在的&#xff0c;不存在就会创建 f open(./test.txt, w, encoding"utf-8")2.写数据到内存中 f.write("你好&#xff0c;世界")3.写到硬盘中 f.flush()#或者 close()有刷新的功能 f.close()整体代码 #打开文件 f …

鲲鹏计算这五年:硬生态基本盘稳住,才能放手进击软生态

文 | 智能相对论 作者 | 叶远风 数智化深入发展、新质生产力成为主旋律的当下&#xff0c;本土计算产业的发展被寄予越来越多的关注和期待。自2019年开启以来&#xff0c;鲲鹏计算产业生态已经整整走过5个年头。 因此&#xff0c;今年华为全联接大会的鲲鹏之夜&#xff0c;在…

还在用windows自带录屏?试试这三款录屏工具

作为一名办公室文员&#xff0c;我经常需要录制电脑屏幕来制作教程或者记录工作流程。在众多的录屏工具中&#xff0c;我尝试了四款不同的录屏工具&#xff0c;包括Windows自带录屏工具。今天&#xff0c;我就来跟大家分享一下我的使用体验&#xff0c;希望能帮助到和我有同样需…

在视频上绘制区域:使用Vue和JavaScript实现交互式画布

在数字时代&#xff0c;交互式媒体内容的创建和消费变得越来越普遍。特别是视频内容&#xff0c;它不仅提供了视觉信息&#xff0c;还允许用户与之互动&#xff0c;从而增强了用户体验。本文将介绍如何使用Vue.js框架和JavaScript创建一个交互式组件&#xff0c;该组件允许用户…

谷歌老户的优势及优化策略,增加曝光度方法介绍

谷歌老户&#xff08;已存在一段时间并积累了历史数据的账户&#xff09;通常具有较高的权重和稳定性&#xff0c;这使其在投放广告时可以更快速地增加流量并保持稳定的表现。以下是一些策略和建议&#xff0c;帮助您最大化利用谷歌老户的优势。 一、它的优势&#xff1a; 账…

Cherry Studio:开启AI智能工作的新篇章

引言 在当今快速发展的科技时代&#xff0c;如何高效利用人工智能技术提升工作效率&#xff0c;成为了各行各业专业人士的共同追求。&#x1f352; Cherry Studio 正是为此而生&#xff0c;它是一款支持多模型服务的桌面客户端&#xff0c;内置了超过 30 个行业的智能助手&…

MDS130-16-ASEMI充电桩专用MDS130-16

编辑&#xff1a;ll MDS130-16-ASEMI充电桩专用MDS130-16 型号&#xff1a;MDS130-16 品牌&#xff1a;ASEMI 封装&#xff1a;DXT-5 批号&#xff1a;2024 现货&#xff1a;50000 最大重复峰值反向电压&#xff1a;1600V 最大正向平均整流电流(Vdss)&#xff1a;130A …

VOC2007数据集

目标检测入门code 文件目录 下载数据集——在官网下载VOC2007数据集 下载训练数据集 TRAIN data 下载测试数据集 TEST data 解压数据集 解压——训练数据集&#xff0c;在服务器上&#xff0c;目录为VOCdevkit 部分文件目录 全部文件总目录 解压——测试数据集 &#xff08;…

828华为云征文|云服务器Flexus X实例评测体验之搭建MySQL数据库

全文目录&#xff1a; 一、前言二、Flexus X云服务器2.1 Flexus X实例概述2.2 为什么选择 Flexus X实例&#xff1f; 三、购选及登录教程3.1 如何选购Flexus X&#xff1f;3.2 登录方式选择 四、安装 MySQL4.1 安装MySQL依赖库4.2 下载MySQL安装包4.3 上传MySQL安装包4.4 解压M…

3D 模型GLTF、GLB格式文件介绍使用

一、介绍 GLTF&#xff08;GL Transmission Format&#xff09;和 GLB&#xff08;GL Binary&#xff09;是用于在 Web 和各种应用程序中传输和加载 3D 场景和模型的开放标准格式。它们由 Khronos Group 开发&#xff0c;旨在提供一种高效、可扩展且易于使用的 3D 内容格式。以…

CCRC-DSA数据安全评估师:数据安全架构是什么?

架构不仅是抽象的概念&#xff0c;更是项目规划、系统开发、产品部署和安全增强中必不可少的思维模式、沟通桥梁和共享语言。 简言之&#xff0c;它定义了系统中包含的元素及其相互关系&#xff0c;这些元素被称为组件或逻辑模块。 例如&#xff0c;“组件”指独立存在的基础…