okhttp post提交参数完成登录功能 保存返回的token

OkHttp全局拦截器设置token超时重新获取 Feign客户端请求远程服务接口时,需要携带token进行认证(详见《微服务迁移记(六):集成jwt保护微服务接口安全》),token有超时时间设置,当超时后,需要重新刷新token。如果每个接口都去判断,那就费事了,最好的办法是在拦截器里做。我这里使用的是OkHttp,新增一个OkHttpInterceptor的拦截器: @Slf4j public class OkHttpIntercept... 阅读详情

作为一名android开发者,通过博客记录自己成长的道路,以下是小白在开发实践中的登录功能实现的一些步骤及功能,希望对做这一部分功能的伙伴有一定的帮助

1.登录的界面布局

2.登录的url、sp保存token、okhttp post请求

3.登录的ui界面,功能代码....


登录界面如下,勿喷



activity_login.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical">

    <de.hdodenhof.circleimageview.CircleImageView
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/ccimgv_head"
        android:layout_width="62dp"
        android:layout_height="62dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="95dp"
        android:src="@mipmap/ic_launcher"
        app:civ_border_color="#0DC5E6"
        app:civ_border_width="2dp"/>

    <TextView
        android:id="@+id/tv_username"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="12dp"
        android:text="用户名"
        android:textColor="#323232"
        android:textSize="15sp"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="51dp"
        android:layout_marginTop="38dp"
        android:text="手机号码"
        android:textColor="#2D2D2D"
        android:textSize="10sp"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:layout_marginLeft="37dp"
        android:layout_marginRight="37dp"
        android:layout_marginTop="4dp"
        android:background="#FFFFFF"
        android:orientation="horizontal">

        <ImageView
            android:layout_width="15dp"
            android:layout_height="15dp"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="8dp"
            android:src="@mipmap/registphone"/>

        <EditText
            android:id="@+id/et_phone"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginLeft="13dp"
            android:background="@null"
            android:hint="123456789"
            android:textSize="12sp"/>

    </LinearLayout>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="51dp"
        android:layout_marginTop="6dp"
        android:text="密码"
        android:textColor="#2D2D2D"
        android:textSize="10sp"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:layout_marginLeft="37dp"
        android:layout_marginRight="37dp"
        android:layout_marginTop="4dp"
        android:background="#FFFFFF">

        <ImageView
            android:layout_width="15dp"
            android:layout_height="15dp"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="8dp"
            android:src="@mipmap/password"/>

        <EditText
            android:id="@+id/et_psw"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginLeft="13dp"
            android:background="@null"
            android:hint="密码"
            android:textSize="12sp"/>
    </LinearLayout>
    <!-- 登录按钮 -->
    <Button
        android:id="@+id/btn_login"
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:layout_marginLeft="37dp"
        android:layout_marginRight="37dp"
        android:layout_marginTop="15dp"
        android:background="@drawable/shape_login_bg"
        android:text="@string/login"
        android:textColor="#FDFDFD"
        android:textSize="14sp"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:layout_marginLeft="37dp"
        android:layout_marginRight="37dp"
        android:layout_marginTop="17dp">

        <Button
            android:id="@+id/btn_user_register"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@null"
            android:text="用户注册"
            android:textColor="#9F9F9F"
            android:textSize="12sp"/>

        <View
            android:layout_width="1dp"
            android:layout_height="14dp"
            android:layout_gravity="center_horizontal"
            android:background="#DCDCDC"/>

        <Button
            android:id="@+id/btn_forget_psw"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@null"
            android:text="忘记密码"
            android:textColor="#9F9F9F"
            android:textSize="12sp"/>
    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@mipmap/background"/>

</LinearLayout>

okhttp post请求登录

LoginActivity

package fho.nak.jeekup.nakfho.ui.loginandregister;

import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.google.gson.Gson;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;

import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
import de.hdodenhof.circleimageview.CircleImageView;
import fho.nak.jeekup.nakfho.MainActivity;
import fho.nak.jeekup.nakfho.R;
import fho.nak.jeekup.nakfho.base.BaseActivity;
import fho.nak.jeekup.nakfho.bean.ResultData;
import fho.nak.jeekup.nakfho.utils.MD5Utils;
import fho.nak.jeekup.nakfho.utils.PreferenceUtils;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

/**
 * @创建者 Jimven
 * @创建时间 2017/7/21/0021  11:35
 */

/**
 * 登录界面
 */
public class LoginActivity extends BaseActivity {
    String loginUrl    = "http://www.xxx";
    @Bind(R.id.ccimgv_head)
    CircleImageView mCcimgvHead;
    @Bind(R.id.tv_username)
    TextView        mTvUsername;
    @Bind(R.id.et_phone)
    EditText        mEtPhone;
    @Bind(R.id.et_psw)
    EditText        mEtPsw;
    @Bind(R.id.btn_login)
    Button          mBtnLogin;
    @Bind(R.id.btn_user_register)
    Button          mBtnUserRegister;
    @Bind(R.id.btn_forget_psw)
    Button          mBtnForgetPsw;
    private MediaType mMediaType;
    private String mToken;

    @Override
    protected int setLayoutId() {
        return R.layout.activity_login;
    }

    @Override
    protected void setUpView() {
        initView();
        initData();
        initEvent();

    }

    //初始化组件
    private void initView() {

    }

    //初始化数据
    private void initData() {

    }

    //初始化事件
    private void initEvent() {

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // TODO: add setContentView(...) invocation
        ButterKnife.bind(this);
    }

    @OnClick({  R.id.btn_login, R
            .id.btn_user_register, R.id.btn_forget_psw})
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_login:
                //登录操作
                login();

                break;
            case R.id.btn_user_register:
                startActivity(new Intent(this, RegisterActivity.class));
                break;
            case R.id.btn_forget_psw:
                startActivity(new Intent(this, ResetpswActivity.class));
                break;
        }
    }

    //登录操作
    private void login() {
        final String phone = mEtPhone.getText().toString();
        final String userPsw = mEtPsw.getText().toString();
        final String md5Password = MD5Utils.md5Password(userPsw);//加密MD5
        //判断是否非空
        if (!TextUtils.isEmpty(temphone) && !TextUtils.isEmpty(tempsw)) {//都不为空
            //请求数据

            OkHttpClient client = new OkHttpClient();
            final JSONObject jsonObject = new JSONObject();

            try {//提交的参数
                jsonObject.put("loginName", phone);
                jsonObject.put("password", md5Password);
            } catch (JSONException e) {
                e.printStackTrace();
            }
            mMediaType = MediaType.parse("application/json; charset=utf-8");
            final RequestBody requestBody = RequestBody.create(mMediaType, jsonObject.toString());
            Request request = new Request.Builder()
                    .post(requestBody)
                    .url(LoginUrl)
                    .build();
            Call call = client.newCall(request);
            call.enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                    //请求失败
                    Log.i("请求情况:", "请求失败");
                }

                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    if (response.isSuccessful()) {
                        Log.i("响应状态", "响应成功");
                        String loginBody = response.body().string();
                        Gson gson = new Gson();
                        ResultData loginData = gson.fromJson(loginBody, ResultData.class);

                        String loginResultCode = loginData.getResultCode();
                        Log.i("返回状态码", loginResultCode);
                        //响应成功,判断状态码
                        if (loginResultCode.equals("100")) {
                            Log.i("登录状态", "登录成功");
                            //获取tokenxz
                            Object data = loginData.getData();
                            String data1 = data.toString();
                          JSONObject jsonObject1 = null;
                            try {
                                jsonObject1 = new JSONObject(data1);
                                mToken = jsonObject1.optString("token");
                                Log.i("打印token", mToken);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }                  
			//保存token
			//用sp工具保存
			PreferenceUtils.putString(getApplicationContext(), "token", mToken);
//登录成功,跳到主界面 startActivity(new Intent(LoginActivity.this, MainActivity.class)); finish(); } else if (loginResultCode.equals("500")) { Log.i("登录状态", "登录失败"); Toast.makeText(LoginActivity.this, "登录失败", Toast.LENGTH_SHORT).show(); } else { Log.i("Jimven", "其他"); } } else { Log.i("响应情况:", "响应失败"); } } }); } else { Toast.makeText(LoginActivity.this, "请填写完整的信息", Toast.LENGTH_SHORT).show(); } }}

附上sp工具代码

PreferenceUtils.java


package fho.nak.jeekup.nakfho.utils;

import android.content.Context;
import android.content.SharedPreferences;

/**
 * sp工具类
 */
public class PreferenceUtils {

   public static void putString(Context context, String key, String value){
      SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
      sp.edit().putString(key, value).commit();
   }

   public static String getString(Context context, String key, String defValue){
      SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
      return sp.getString(key, defValue);
   }
   public static String getString(Context context, String key){
      SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
      return getString(context,key,"");
   }

   public static void putBoolean(Context context, String key, boolean value){
      SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
      sp.edit().putBoolean(key, value).commit();
   }

   public static boolean getBoolean(Context context, String key, boolean defValue){
      SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
      return sp.getBoolean(key, defValue);
   }

   public static boolean getBoolean(Context context, String key){
      SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
      return getBoolean(context,key,false);
   }

   public static void putInt(Context context, String key, int value){
      SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
      sp.edit().putInt(key, value).commit();
   }

   public static int getInt(Context context, String key, int defValue){
      SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
      return sp.getInt(key, defValue);
   }

   public static int getInt(Context context, String key){
      SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
      return getInt(context,key,-1);
   }
 
}

以上简单的登录功能就完成了,希望对大家有帮助,也希望大家能够多多交流,一起成长

Android登录安全实践:GET与POST原理、OkHttp/Retrofit实现与HTTPS加密 HTTP协议中的GET与POST方法是客户端与服务器通信的基础,定义了数据请求与提交的核心机制。GET方法通过URL查询字符串传递参数,设计用于安全、幂等的资源获取操作;而POST方法将数据置于请求体内,专为可能改变服务器状态的提交操作设计,如用户登录。在移动开发领域,正确选择请求方法对保障数据传输安全、符合RESTful设计规范至关重要。对于Android应用登录这类涉及敏感信息提交的场景,必须采用POST方法并结合HTTPS加密传输,这是防止密码明文泄露、抵御中间人攻击的工程实践基石。通过OkHttp和 阅读详情

相关推荐

金蝶云星空WebAPI开发实战:Android端登录功能实现与OkHttp优化

本文详细介绍了在Android应用中通过OkHttp实现金蝶云星空WebAPI登录功能的实战步骤。内容涵盖从接口分析、请求体构造、Cookie管理到OkHttp客户端的优化配置,提供了解决企业级API对接中常见问题的完整方案,并强调了会话维持与安全存储的最佳实践。

weixin_28607671的博客 298

OkHttp工具类 get 和 post(带Token)以及调用

OkHttp工具类 get 和 post(带Token)以及调用 例: OkHttp工具类 get 和 post(带Token) package com.sgy.sgy_img2; import java.util.Map; import okhttp3.FormBody; import okhttp3.OkHttpClient; import okhttp3.Re...

jun_tong的博客 4167

github授权登录功能注册OAuth App实现第三方登录博客个人网站

7月7日,今天是高考的日子,没错是受疫情影响高考推迟一个月。同时也是七七事变83周年的日子,两个日子重合,好像是在提醒考生、青年勿忘国耻。知识就像国家脊梁,拥有他方能挺起腰杆,提升民族自信。新时代的少年们要用知识武装自己,不必说捍卫祖国,也要做一个对知识有追求,对社会有贡献的人。 如题,要想实现GitHub授权登录,你必须拥有GitHub账号,并且创建自己的OAuth App。 1. 创建OAuth App。 github个人主页 ➡ Settings ➡ Developer settings ➡ OA.

FRed、 3390

OkHttp 之 token使用

OkHttp 使用拦截器处理Token过期,刷新Token

xiao_sier的博客 8230

微信扫码登录后端实战:OAuth2.0授权回调与用户信息获取全解析

OAuth2.0是一种开放授权标准协议,它定义了资源所有者、客户端、授权服务器和资源服务器四个角色,通过授权码模式实现安全的第三方应用授权。其核心原理是客户端引导用户至授权服务器,用户同意授权后,授权服务器通过回调地址返回一个短期有效的授权码,客户端再用此码换取访问令牌,最终凭令牌访问受保护的用户资源。这一机制在技术上的核心价值在于,它将用户凭证与第三方应用隔离,避免了密码泄露风险,同时实现了细粒度的权限控制。在工程实践中,OAuth2.0广泛应用于社交登录、API授权等场景,例如微信生态的扫码登录功能。本

weixin_30315905的博客 519

Spring Boot集成微信扫码登录:OAuth2.0原理与实战指南

OAuth2.0是一种开放授权标准协议,它允许用户授权第三方应用访问其存储在资源服务器上的信息,而无需共享用户名和密码。其核心原理是通过授权码模式,在用户、客户端和授权服务器之间安全地交换令牌,从而实现安全的第三方登录。这一技术价值在于极大地简化了用户登录流程,提升了用户体验和转化率,同时保障了账户安全。在应用场景上,OAuth2.0广泛应用于需要集成微信、微博等社交平台登录的Web或移动应用中。本文聚焦于微信扫码登录这一具体实现,深入剖析了其背后的OAuth2.0授权码模式流程,并提供了基于Spring

weixin_34014555的博客 473

okhttp3保存response字节内容并将文件保存到本地

okhttp3保存response字节内容并将文件保存到本地

Ellan的博客 1070

Android逆向工程入门:使用JEB进行静态分析的完整指南

逆向工程是理解软件内部工作机制的关键技术,通过分析编译后的程序来推断其设计逻辑与实现原理。在移动安全领域,Android应用逆向尤为重要,它帮助安全研究人员、开发人员分析应用行为、检测漏洞或学习实现方案。静态分析作为逆向工程的核心方法,无需运行程序即可通过反编译、代码审计等手段深入探查应用逻辑。JEB作为一款专业的集成逆向环境,以其高效的反编译引擎和智能代码重构能力,显著降低了Android APK静态分析的门槛。它能够直接处理DEX字节码,生成高质量的可读Java代码,并支持资源解析、交叉引用追踪等高级功

weixin_33708432的博客 271

【Android项目实战 | 从零开始写app(四)】Okhttp+Gson实现服务端登录验证功能并保存Token值

本篇实现效果: 使用Okhttp3进行联网请求,通过post方法把用户名和密码发送到服务进行校验,使用Gson解析返回的json数据验证正确后,返回一个token值,并token值,username,password通过SharedPreferences 保存到本地,如下: 项目目录:没有的就跟着新建如下 加载依赖&联网&设置(实现前提) 加载依赖: 注意在app目录下的build.gradle 加入如下依赖,接着Sync Now 同步一下: implementation 'com.

go 9576

逆向工程实战:拆解Instagram登录协议中的混合加密机制

在现代移动应用安全架构中,混合加密是保障用户认证数据安全的核心技术。其基本原理是结合非对称加密与对称加密的优势:使用RSA等非对称算法安全地交换密钥,再通过AES等对称算法高效加密实际传输的敏感数据。这种设计在工程上实现了前向保密与高性能的平衡,广泛应用于登录、支付等高安全要求的场景。以Instagram为代表的超级App,其登录流程便深度集成了这套机制,并融合了设备指纹、SSL Pinning等额外防护层。通过逆向工程分析其Android客户端,可以清晰观察到密钥协商、AES-GCM加密等具体实现,为理解

weixin_33676492的博客 333

安卓APP逆向分析实战:从工具链到对抗混淆的完整指南

在移动应用开发与安全领域,逆向分析是一项关键技术,它通过解析已编译应用来理解其内部结构和运行机制。其核心原理是结合静态与动态分析,利用反编译工具还原代码逻辑,并通过运行时插桩技术监控应用行为。这项技术的价值在于,它不仅能帮助开发者以攻击者视角审视自身代码,发现如硬编码密钥、不安全的通信协议等安全隐患,还能助力安全研究人员评估应用整体安全水位。在实际应用场景中,逆向分析常用于协议分析、漏洞挖掘、恶意软件检测以及学习优秀应用架构。本文以典型应用为例,详细阐述了如何运用Frida进行动态调试以绕过SSL Pinn

areen7003的博客 507

个人笔记:Kotlin使用Okhttp发送Post请求

在发送请求前需要加入一些配置来确保能够正常运行,具体可以参考之前的文章,这里就不多做赘述。个人笔记:Kotlin使用OKHttp解析Json文件_福尔蘑菇头的博客-优快云博客 与get请求不同的是post请求一般都带有参数,所以需要创建一个jsonObject用于传递值 var jsonObject = JSONObject() jsonObject.put("userName","root") jsonObject.put("password","123456") 然后再将值以json形.

qq_62870666的博客 4518

Android客户端连接Web服务器实现登录功能全流程实战(含服务端、数据库与安卓端)

在典型的登录流程中,Android 客户端需要向 Web 服务器发送用户输入的凭证信息。为了保证接口的一致性和可维护性,前后端必须约定统一的数据格式。最常见的做法是使用 JSON 作为请求体内容,其结构简洁明了:该结构遵循MIME 类型规范,相较于传统的表单编码(),具有更强的扩展能力。例如,未来若需添加“设备标识”或“验证码”,只需增加对应字段即可,无需修改底层传输逻辑。这种标准化的设计不仅提升了代码的可读性,也为自动化测试、文档生成(如 Swagger/OpenAPI)提供了便利。

weixin_42153793的博客 759

基于SpringBoot的Github授权登录功能

当我们在登陆一些网站的时候经常看到使用Github登陆的功能,那这个功能是怎么实现的呢?下面我们就来看看一看 本文介绍的内容主要包含以下工具: Spring Boot GitHub OkHttp FastJSON idea 在Github中创建OAuth Apps 1、进入Github的Developer settings ,并点击左侧的OAuth app按钮,最后点击New OAuth ...

Miracle42的博客 1074

用MCP扩展Cursor的5种神奇用法:从文件操作到网页抓取实战

本文深入探讨了如何利用MCP(Model Context Protocol)扩展Cursor AI编程助手,解锁五种高效实用场景。从文件系统操作、网页内容抓取,到数据库查询、Figma设计稿对接,乃至构建自定义MCP服务器,文章通过实战案例展示了如何将Cursor从代码编辑器升级为能理解并操作工作环境的智能助手,显著提升开发效率与自动化水平。

weixin_29231027的博客 315

信号完整性入门:为什么工程师总爱用dB来描述衰减?

本文深入探讨了信号完整性分析中工程师偏爱使用dB(分贝)单位描述衰减的原因。dB通过对数转换,将大动态范围的乘除关系简化为加减运算,极大地方便了多级系统分析和链路预算计算。文章重点解释了-3dB点的核心意义,即功率衰减一半的临界状态,并阐述了其在评估信道带宽、插入损耗与回波损耗等关键参数中的实际应用,是高效工程思维和沟通的重要工具。

weixin_29263201的博客 385

如何调用文心一言API,并将它接入网站中?

主要帮助新手快速配置文心一言API,完成第一次调用API服务。

qq_74756300的博客 4756

手机流畅的秘密:拆解LPDDR5X在骁龙8 Gen2平台上的电源与信号完整性设计

本文深入解析了LPDDR5X内存与骁龙8 Gen2处理器在旗舰手机中的协同设计,重点探讨了0.5V超低电压下的电源完整性设计以及8.5Gbps高速传输中的信号完整性挑战。通过详细的电源树架构、关键器件选型和布线策略分析,揭示了如何实现高性能与低功耗的完美平衡,为手机流畅体验提供硬件保障。

weixin_30235225的博客 483

问答社区项目学习——引入第三方登录(四)

建立学习的第一站吧,从头开始。欢迎大家跟我一起学习~ 这里也是为了记录自己的学习之路!——by xln 1. 实现网站的登录功能,这里使用github的登录功能,在github首页下滑进入API 2. 选择github授权app,进入文档中,粗略浏览大概后,在右侧栏中找到Building OAuth App 右边侧栏底部 3. ...

脑子里没有知识只有可爱的小波克~ 373

Maven的下载安装配置教程(详细图文)

目录 一、简单了解一下什么是Maven 二、maven的下载 三、maven的安装 四、maven的环境变量配置 五、setting文件配置 六、开发工具配置Maven 一、简单了解一下什么是Maven Maven就是一款帮助程序员构建项目的工具,我们只需要告诉Maven需要哪些Jar 包,它会帮助我们下载所有的Jar,极大提升开发效率。 1.Maven翻译为“专家“, ”内行”的意思,是著名Apache公司下基于Java开发的开源项目。 2.Maven项目对象模型(POM)是一..

bakelFF的博客 12万+

用python画带有正负值的条形图

常见的条形图只能表现数据的大小,却不能表现值的正负关系。但是其实仅仅使用`pandas`和`matplotlib`两个包就可以实现y轴负轴的添加以及负值的显示,并且可以为正负值分别设置不同的颜色,让条形图看上去更加清晰,易于我们分析

weixin_44853840的博客 5382

Android毕业设计实战:宠物社区APP开发全流程解析

移动应用开发是计算机与软件工程领域的重要方向,其核心在于将创意转化为功能完整、体验流畅的应用程序。从技术原理层面看,现代Android开发通常采用MVVM架构模式,通过数据绑定实现UI与业务逻辑的分离,提升代码的可维护性和可测试性。在工程实践中,合理的技术选型与模块化设计是项目成功的关键,例如使用Retrofit处理网络请求、Room管理本地数据,能有效支撑社区类应用的高频数据交互需求。这类技术组合尤其适用于需要处理用户生成内容、实现实时信息展示与互动的场景,例如社交平台、信息论坛等。本文以宠物社区平台为例

congbao6525的博客 308

SAP ABAP 获取采购订单未清数量/在途库存的 6 种方式

这篇文章我总结了获取采购订单未清数量/在途库存的 6 种方式,每种方式的优劣势和适用场景有所不同。读者请结合自身需要选择。

SAP李斌,本人承诺所有原创文章均不使用任何AI生成技术,请大家放心阅读。 2653

移动应用安全测试:从验证码嗅探原理到HTTPS抓包实战

网络通信安全是移动应用开发的基础,理解HTTP与HTTPS协议的工作原理是评估应用安全性的关键。HTTPS通过TLS/SSL协议对传输层进行加密,防止数据在传输过程中被窃取或篡改,这是现代应用保障用户隐私和数据完整性的核心技术。在安全测试与开发调试场景中,工程师常需分析应用网络行为,此时代理抓包工具成为重要技术手段。通过配置代理服务器与安装CA证书,可以在授权测试环境中解密HTTPS流量,观察请求与响应数据,从而验证接口安全性。本文聚焦于验证码安全这一典型场景,详细解析了使用Burp Suite等工具进行合

cuizhu0832的博客 336

EPO: Hierarchical LLM Agents with Environment PreferenceOptimization

长期决策和规划任务依然是基于大型语言模型(LLM)的智能体面临的一大挑战(Valmeekam 等,2023;Liu 等,2023;Silver 等,2024)。这些任务需要智能体进行多步骤的规划,同时保持行为的一致性和目标导向,这对于通常被设计用于即时和局部预测的大型语言模型来说颇为困难。此外,针对具身智能体的大型语言模型微调面临的一个关键难题是大规模标注数据的需求(Reed 等,2022)。

qq_52053775的博客 142

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: scrollview嵌套listview的解决方法(一)
下一篇: 关于Cannot load project: com.intellij.ide.plugins.PluginManager$StartupAbortedEx
Jimven的博客
博客等级 码龄10年 27粉丝 20原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值