java post请求携带header参数

利用OkHttp和Retrofit完成一套mvp框架,但是后面有一个数据,需要post请求,携带一个header参数,这个位置不是很会,post提交数据会,但是应该在哪里携带这个header参数

在使用 Retrofit 发起 POST 请求时,可以通过在请求头中添加 Header 参数来携带需要的参数。可以使用 @Headers 注解指定 Header 参数,也可以在方法参数列表中使用 @Header 注解指定 Header 参数。示例代码如下:

public interface ApiService {
    @Headers("header-key: header-value") // 添加 Header 参数
    @POST("api/path")
    Call<Result> postData(@Body RequestBody requestBody);
}

上述代码中,@Headers("header-key: header-value") 注解添加了一个名为 header-key,值为 header-value 的 Header 参数。

当发送 POST 请求时,可以通过 @Body 注解指定需要发送的请求体参数。例如,可以将请求体参数封装为一个 RequestBody 对象,并传入 postData() 方法中发送请求:

ApiService service = retrofit.create(ApiService.class);
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), "request-body-data");
Call<Result> call = service.postData(requestBody);
call.enqueue(new Callback<Result>() {
    @Override
    public void onResponse(Call<Result> call, Response<Result> response) {
        // 请求成功
    }

    @Override
    public void onFailure(Call<Result> call, Throwable t) {
        // 请求失败
    }
});

需要注意的是,在添加 Header 参数时,需要根据服务端 API 文档中约定的参数名和参数值进行设置。此外,在发送 POST 请求时,需要将请求体参数封装为一个 RequestBody 对象。

在okHttp中,new Request请求的时候,构建Builder有一个addHeader,可以带请求头,例子如下


//post请求
        Request request = new Request.Builder().url("http://127.0.0.1:8082/kabaouser/es/ok").
                addHeader("Access-User-Token","e5cHLWScbto3VfvYTU1llVZgl/WniA4QZZ8epmn8k/o=").post(formBody).build();

上面回答的不错。如果统一处理header。可以添加一个拦截器,给post请求统一添加header公共信息

用 OkHttp 发起 POST 请求携带 Header 参数:

import okhttp3.*;

import java.io.IOException;

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

        // 创建请求体
        RequestBody requestBody = new FormBody.Builder()
                .add("param1", "value1")
                .add("param2", "value2")
                .build();

        // 创建请求
        Request request = new Request.Builder()
                .url("http://example.com/api/endpoint")
                .post(requestBody)
                .addHeader("HeaderName", "HeaderValue")  // 添加 Header 参数
                .build();

        // 发起请求
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()) {
                    String responseBody = response.body().string();
                    System.out.println(responseBody);
                } else {
                    System.out.println("Request failed: " + response.code());
                }
            }
        });
    }
}

用 Retrofit 发起 POST 请求携带 Header 参数:

import okhttp3.OkHttpClient;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.http.*;

public class RetrofitExample {
    public static void main(String[] args) {
        // 创建 Retrofit 实例
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://example.com/api/")
                .client(new OkHttpClient())  // 使用自定义的 OkHttpClient
                .build();

        // 定义 API 接口
        interface ApiService {
            @Headers("HeaderName: HeaderValue")  // 添加 Header 参数
            @FormUrlEncoded
            @POST("endpoint")
            Call<ResponseBody> postData(@Field("param1") String value1, @Field("param2") String value2);
        }

        // 创建 API 接口实例
        ApiService apiService = retrofit.create(ApiService.class);

        // 发起请求
        Call<ResponseBody> call = apiService.postData("value1", "value2");
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                if (response.isSuccessful()) {
                    try {
                        String responseBody = response.body().string();
                        System.out.println(responseBody);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } else {
                    System.out.println("Request failed: " + response.code());
                }
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                t.printStackTrace();
            }
        });
    }
}