app逆向-⽹络请求库okhttp3

文章目录

    • 一、前言
    • 二、应用
      • 1、添加权限AndroidManifest.xml
      • 2、添加依赖okhttp3
      • 3、编写界面文件activity_main.xml
      • 4、编写Activity代码
    • 三、效果

一、前言

OkHttp是由Square公司开发的用于Java和Android的开源HTTP客户端库。它被广泛用于在Java和Android应用程序中进行HTTP请求。OkHttp支持HTTP/2、SPDY和HTTP/1.1协议,并具有连接池、透明gzip压缩和响应缓存等功能。

下面是一个简单的示例,演示了如何在Java中使用OkHttp进行GET请求:

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;

public class OkHttpExample {
    public static void main(String[] args) {
        OkHttpClient client = new OkHttpClient();

        Request request = new Request.Builder()
                .url("https://api.example.com/data")
                .build();

        try {
            Response response = client.newCall(request).execute();
            String responseBody = response.body().string();
            System.out.println(responseBody);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个例子中:

我们创建了一个OkHttpClient实例。
我们创建了一个指定了要请求的URL的Request对象。
我们使用client.newCall(request).execute()来同步执行请求。这个方法返回一个Response对象。
我们使用response.body().string()将响应主体提取为字符串。

二、应用

1、添加权限AndroidManifest.xml

这个文件包含了应用程序的各种信息,包括应用程序的包名、应用程序图标、应用程序需要的权限、应用程序中定义的组件(如活动、服务、广播接收器)、应用程序的版本信息等。

在AndroidManifest.xml文件中添加网络请求权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">
    <!--网络请求权限-->
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MyApplication">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

2、添加依赖okhttp3

根目录下的 build.gradle 文件通常用于配置整个项目的构建信息,例如项目的构建脚本版本、仓库地址、全局依赖项等。

在build.gradle中添加

dependencies {

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'com.google.android.material:material:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    // okhttp3 请求依赖
    implementation 'com.squareup.okhttp3:okhttp:4.9.1'
}

3、编写界面文件activity_main.xml

“activity_main.xml” 文件是 Android 应用程序中的一个布局文件,用于定义应用程序的主界面布局。它位于 “res/layout” 目录下。


<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/content_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btn_test"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/but_test"
        app:layout_constraintBottom_toBottomOf="parent"
        />

androidx.constraintlayout.widget.ConstraintLayout>

4、编写Activity代码

创建MainActivity.java实现接口请求响应逻辑。

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;

import android.widget.TextView;

import org.jetbrains.annotations.NotNull;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private static final String TAG = "xxxxxxx";
    private final OkHttpClient client = new OkHttpClient();
    private TextView tvContent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.btn_test).setOnClickListener(this);
        tvContent = findViewById(R.id.content_test);
    }

    // 点击后执行哪段代码
    @Override
    public void onClick(View v) {
        okHttpAsynchronousDemo();
    }

    // okHttp同步方式请求
    private void okHttpDemo() {
        Request request = new Request.Builder()
                .url("https://reqres.in/api/users?page=2")
                .build();
        tvContent.setText("同步请求中.......");
        // 同步代码中必须开线程改变页面ui
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    // 发起请求并返回数据
                    Response response = client.newCall(request).execute();
                    String responseBody = response.body().string();
                    System.out.println(responseBody);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            tvContent.setText("同步请求成功" + responseBody);
                        }
                    });
                } catch (IOException e) {
                    // 请求失败逻辑
                    e.printStackTrace();
                }
            }
        }).start();
    }

    // okHttp异步方式请求
    private void okHttpAsynchronousDemo() {
        // 发起请求
        Request request = new Request.Builder()
                .url("https://reqres.in/api/users?page=2")
                .build();
        tvContent.setText("异步请求中.......");
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onResponse(@NotNull Call call, Response response) throws IOException {
                // 处理请求成功的响应
                String responseBody = response.body().string();
                // 在这里处理响应数据
                System.out.println(responseBody);
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        tvContent.setText("异步请求成功" + responseBody);
                    }
                });
            }

            @Override
            public void onFailure(@NotNull Call call, IOException e) {
                // 处理请求失败
                e.printStackTrace();
            }
        });
    }

    // url 拼接方法
    private void okHttpParams(){
        HttpUrl.Builder builder = HttpUrl.parse("https://reqres.in/api/users").newBuilder();
        builder.addQueryParameter("page", "2");
        String url = builder.build().toString();
        Log.d(TAG, url);
    }
}

三、效果

app逆向-⽹络请求库okhttp3_第1张图片

你可能感兴趣的:(app逆向随笔,java,android,studio)