Android:给OHTTP添加Interceptor 拦截器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android:给OHTTP添加Interceptor 拦截器相关的知识,希望对你有一定的参考价值。

参考技术A

1:需求:

2:OkHttp/Retrofit的实现

现在说到网络框架,应该毫无疑问是Retrofit了。上面说的加密方案说到底还是要在网络请求框架内加上,怎么做入侵最小,怎么做最方便才是重点。

1、坑定不能直接在接口调用层做加密,加参数,这样每个接口都要修改,这是不可能的。
2、ConverterFactory处理,这也是网上可以搜到的很多文章的写法,但我觉得还是有入侵。而且有点麻烦。
3、OkHttp添加拦截器,这种方法入侵最小(可以说没有),实现呢也非常优雅。

参考地址: https://www.waitalone.cn/mobilesecurity/okhttp.html

为啥我得到 cy.intercept 不是函数?

【中文标题】为啥我得到 cy.intercept 不是函数?【英文标题】:Why do I get cy.intercept is not a function?为什么我得到 cy.intercept 不是函数? 【发布时间】:2021-12-13 22:34:29 【问题描述】:

我正在尝试拦截 POST 请求,但收到以下错误:

enter image description here

这是我的测试文件代码:

enter image description here

我发现了一个类似的问题:

cy.intercept is not a function Cypress test

通过升级 cypress 版本高于 v5.3 解决了这个问题。但我已经有 cypress 版本 6.14.15。该错误似乎只在.Then() 部分上复制,这很奇怪,因为在前一行代码中调用了cy.intercept 函数,而不是在.Then() 部分中。问题到底出在哪里?

编辑: 这是 package.json 文件


  "name": "test-project-v2",
  "version": "0.1.0",
  "private": true,
  "scripts": 
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "test:unit": "vue-cli-service test:unit",
    "test:e2e": "vue-cli-service test:e2e",
    "lint": "vue-cli-service lint"
  ,
  "dependencies": 
    "axios": "^0.24.0",
    "core-js": "^3.6.5",
    "vue": "^3.0.0",
    "vuex": "^4.0.0-0"
  ,
  "cypress-cucumber-preprocessor": 
    "nonGlobalStepDefinitions": true
  ,
  "devDependencies": 
    "@vue/cli-plugin-babel": "~4.5.0",
    "@vue/cli-plugin-e2e-cypress": "~4.5.0",
    "@vue/cli-plugin-eslint": "~4.5.0",
    "@vue/cli-plugin-unit-jest": "~4.5.0",
    "@vue/cli-plugin-vuex": "~4.5.0",
    "@vue/cli-service": "~4.5.0",
    "@vue/compiler-sfc": "^3.0.0",
    "@vue/eslint-config-prettier": "^6.0.0",
    "@vue/test-utils": "^2.0.0-0",
    "babel-eslint": "^10.1.0",
    "eslint": "^6.7.2",
    "eslint-plugin-prettier": "^3.3.1",
    "eslint-plugin-vue": "^7.0.0",
    "prettier": "^2.2.1",
    "sass": "^1.26.5",
    "sass-loader": "^8.0.2",
    "typescript": "~3.9.3",
    "vue-jest": "^5.0.0-0"
  ,
  "eslintConfig": 
    "root": true,
    "env": 
      "node": true
    ,
    "extends": [
      "plugin:vue/vue3-essential",
      "eslint:recommended",
      "@vue/prettier"
    ],
    "parserOptions": 
      "parser": "babel-eslint"
    ,
    "rules": ,
    "overrides": [
      
        "files": [
          "**/__tests__/*.j,ts?(x)",
          "**/tests/unit/**/*.spec.j,ts?(x)"
        ],
        "env": 
          "jest": true
        
      
    ]
  ,
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not dead"
  ],
  "jest": 
    "preset": "@vue/cli-plugin-unit-jest",
    "transform": 
      "^.+\\.vue$": "vue-jest"
    
  


【问题讨论】:

你能分享package.json文件来检查赛普拉斯的版本吗? 请提供足够的代码,以便其他人更好地理解或重现问题。 @Manuel Abascal 我刚刚分享了 package.json 文件。我还没有尝试过答案,但我今天会告诉你。 【参考方案1】:

我会像这样断言cy.intercept 路由:

cy.wait('@dialog').should(response => 
    expect(response.response.statusCode).to.eq(200);
);

respose.body 中的这段代码 sn-p 也有错字:

cy.wait('@dialog').its('respose.body').should('have.Congrats');

我还会检查您的package.json 和您当前安装的Cypress 版本。请注意,cy.intercept() 是在 Cypress 6.0.0 中引入的。

【讨论】:

您好,我尝试了您的回复并且它有效,但它并没有真正回答我的问题。我想使用 cy.intercept 存根 POST 请求。但是当我写下那一行(或实际文档示例中的任何一行)时,它告诉我同样的错误:cy.intercept is not a function... Cypress version: 6.14.15 问题是使用的 cypress 版本是 3。但是在运行 npm cypress --version 时,我得到了 6。当我重新安装 cypress 时,它解决了问题。谢谢! @Manuel

以上是关于Android:给OHTTP添加Interceptor 拦截器的主要内容,如果未能解决你的问题,请参考以下文章

为啥我得到 cy.intercept 不是函数?

如何在 Spring Security 中动态决定 <intercept-url> 访问属性值?

Android 源码分析 事件传递机制

序数逻辑回归:Intercept_ 返回 [1] 而不是 [n]

处理 bean 注册时出错 [io.micronaut.rabbitmq.intercept.RabbitMQConsumerAdvice]

Vocabulary: Intercept