androidpost添加到请求头

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了androidpost添加到请求头相关的知识,希望对你有一定的参考价值。

首先需要在url中加特殊标记/协议, 如在onWebViewResource方法中拦截对应的请求,然后将要添加的请求头,以get形式拼接到url末尾。
拦截器没搞懂就先搞这个法子暂时先写到请求里面,不然api接口啥都用不了,其实也并不是特别麻烦,后续要改,不考虑使用拦截器的话,可能要使用到sqlite数据库,emmmm,想想还是别这么干。
1,post + header
 public void postTest()
        OkHttpClient client = new OkHttpClient();
        //post请求
        FormBody formBody = new FormBody.Builder()
                .add("event_id","33")
                .build();

        Request request = new Request.Builder().url(DecryptionAddress+"app/event/accept").
                addHeader("Token","服务器获取的token").post(formBody).build();

        client.newCall(request).enqueue(new Callback()
            public void onFailure(Call call, IOException e)
                System.out.println(e.getMessage());
                        public void onResponse(Call call, Response response) throws IOException
                if(response.code() >= 200 && response.code() < 300)
                   String result = response.body().string();
                    System.out.println(result);
               
           
        );
   
登录后复制

2,get + header
参考技术A android
Android:okhttp发送请求并且添加token至header头(post+get)

今人不见古时月,今月曾经照古人
转载
关注
2点赞·2609人阅读
拦截器没搞懂就先搞这个法子暂时先写到请求里面,不然api接口啥都用不了,其实也并不是特别麻烦,后续要改,不考虑使用拦截器的话,可能要使用到sqlite数据库,emmmm,想想还是别这么干。
1,post + header
public void postTest()
OkHttpClient client = new OkHttpClient();
//post请求
FormBody formBody = new FormBody.Builder()
.add("event_id","33")
.build();

Request request = new Request.Builder().url(DecryptionAddress+"app/event/accept").
addHeader("Token","服务器获取的token").post(formBody).build();

client.newCall(request).enqueue(new Callback()
public void onFailure(Call call, IOException e)
System.out.println(e.getMessage());
public void onResponse(Call call, Response response) throws IOException
if(response.code() >= 200 && response.code() < 300)
String result = response.body().string();
System.out.println(result);


);

登录后复制


2,get + header

public void getTest()
//get请求
OkHttpClient client = new OkHttpClient();
Request request1 = new Request.Builder()
.url(DecryptionAddress+"/app/event/detail?event_id=89")
.addHeader("Token","服务器获取的token")
.build();

client.newCall(request1).enqueue(new Callback()
@Override
public void onFailure(Call call, IOException e)
System.out.println(e.getMessage());

@Override
public void onResponse(Call call, Response response) throws IOException
if(response.code() >= 200 && response.code() < 300)
String result = response.body().string();
System.out.println(result);


);

登录后复制

————————————————

原文链接:https://blog.csdn.net/title71/article/details/113115931
参考技术B 您可以使用HttpURLConnection类中的setRequestProperty方法来添加请求头,例如:connection.setRequestProperty("androidpost", "value");其中,"androidpost"是您想要添加到请求头的参数名称,"value"是您想要添加到请求头中参数的值。 参考技术C androidpost添加到请求头如下。目前获取响应头的方法只找到了这一种 但是总感觉有些不足 因为在WebResourceResponse类中是有响应头的获取方法的

如何将auth令牌添加到每个http RSpec测试头

我在尝试验证请求规范时遇到问题。如何在每个http请求的标头中传递有效的身份验证令牌?我的方法是否正确?

tweets_request_spec.rb

require 'rails_helper'

RSpec.describe 'Tweets API', type: :request do
  before do
    @tweets = create_list(:tweet, 10)
    @tweet = @tweets.first
  end

  describe 'GET /tweets' do
    before { get '/tweets', { "Authorization": *some sort of token*} }

    it "returns tweets" do
      expect(json).to_not be_empty
      expect(json).to eq(10)
    end

    it "is a successful http request" do
      expect(response).to have_http_response(200)
    end
  end
end

这是我的身份验证控制器代码,以及帮助生成和解码在http标头中传递的身份验证令牌的模块。

authentication_controller.rb

class AuthenticationController < ApplicationController
  skip_before_action :authenticate_request

  def authenticate
    command = AuthenticateUser.call(params[:email], params[:password])

    if command.success?
      render json: { auth_token: command.result }
    else
      render json: { error: command.errors }, status: :authorized
    end
  end
end

authorize_api_request.rb

class AuthorizeApiRequest
  prepend SimpleCommand

  def initialize(headers = {})
    @headers = headers
  end

  def call
    user
  end

  private

  attr_reader :headers

  def user
    @user ||= User.find(decoded_auth_token[:user_id]) if decoded_auth_token
    @user ||= errors.add(:token, 'Invalid token') && nil
  end

  #decode the auth token and retrieve the user id
  def decoded_auth_token
    @decoded_auth_token ||= JSONWebToken.decode(http_auth_header)
  end

  #retrieve auth token from header
  def http_auth_header
    if headers['Authorization'].present? 
      return headers['Authorization'].split(' ').last
    else
      errors.add(:token, 'Missing token')
    end
  end
end
答案

the official pluralsight page复制的一些代码提取

要进行身份验证的端点位于config/routes.rb

post 'authenticate', to: 'authentication#authenticate'

执行此操作。如果您正确进行身份验证,操作将返回令牌。

def authenticate 
   command = AuthenticateUser.call(params[:email], params[:password]) 
   if command.success? 
      render json: { auth_token: command.result } 
   else 
      render json: { error: command.errors }, status: :unauthorized 
   end 
end

在rspec中,您有两个选项,您可以模拟此方法或创建工厂。

token based身份验证的概念是,一旦通过身份验证,用户将拥有一个令牌,并且通过提供此令牌,他将能够访问仅保留给用户的功能

请求

$ curl -H "Content-Type: application/json" -X POST -d '{"email":"example@mail.com","password":"123123123"}' http://localhost:3000/authenticate

作为回应令牌

{"auth_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE0NjA2NTgxODZ9.xsSwcPC22IR71OBv6bU_OGCSyfE89DvEzWfDU0iybMA"}

如果您在标头中包含令牌,请求将不会触发授权错误

$ curl -H "Authorization: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE0NjA2NTgxODZ9.xsSwcPC22IR71OBv6bU_OGCSyfE89DvEzWfDU0iybMA" http://localhost:3000/items []

所以在执行get请求之前,请在请求标头中包含令牌

request.headers['Authorization'] = auth_token
get :your_action

如何提供auth_token的正确值?

你将需要mockauthenticate_request的方法ApplicationController,因为它被称为before action

#app/controllers/application_controller.rb
class ApplicationController < ActionController::API
 before_action :authenticate_request
  attr_reader :current_user

  private

  def authenticate_request
    @current_user = AuthorizeApiRequest.call(request.headers).result
    render json: { error: 'Not Authorized' }, status: 401 unless @current_user
  end
end

我相信你应该模拟这行代码,以避免收到身份验证错误。

@current_user = AuthorizeApiRequest.call(request.headers).result

所以我会写这样的规格

user = FactoryBot.create(:user)
allow(AuthorizeApiRequest).to receive(:call).and_return(user)
# request.headers['Authorization'] = auth_token # this is not required anymore the authentication is skipped
get :your_action

我引用pluralsight

通过使用before_action,每次用户发出请求时,服务器都会将request headers(使用内置对象属性request.headers)传递给AuthorizeApiRequest。在result上调用AuthorizeApiRequest.call(request.headers)来自SimpleCommand模块,它被定义为attr_reader :result。请求结果返回到@current_user,因此可用于继承自ApplicationController的所有控制器。

你可以阅读更多关于嘲笑的内容

https://github.com/rspec/rspec-mocks

以上是关于androidpost添加到请求头的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloudGateway 学习笔记 - 使用内置过滤器添加请求头响应头

SpringCloudGateway 学习笔记 - 使用内置过滤器添加请求头响应头

SpringCloudGateway 学习笔记 - 使用内置过滤器添加请求头响应头

使用 Azure 服务结构的默认客户端时如何将消息头添加到请求中?

如何在http请求头中添加cookie-CSDN论坛

华为云技术分享Python爬虫偷懒神器 — 快速构造请求头!