提问者:小点点

仅使用表单数据进行改装2


我正在尝试使用改装2发出POST请求。请求类型是表单数据而不是应用程序/x-www-form-urlencoded

我只是发布数据,而不是请求中的文件,响应是JSON的形式。

我尝试了@FormUrlEncoded,@Multipart,但它不起作用。

我已经尝试按照要求

1.第一次尝试

@FormUrlEncoded
@POST("XXXX")
Call<PlanResponse> getPlanName(@Field(Constants.ACTION_ID) String actionId, @Field(Constants.OFFER_CODE) String offerCode);

2.第二次尝试

@Headers({"Content-Type: multipart/form-data","Content-Type: text/plain"})
@FormUrlEncoded
@POST("XXXX")
Call<PlanResponse> getPlans(@Body @FieldMap(encoded = false) Map<String, String> data);

3.第三次尝试

@Headers("Content-Type: multipart/form-data")
@Multipart
@POST("XXXX")
Call<PlanResponse> myPlans(@Part(Constants.ACTION_ID) String actionId, @Part(Constants.OFFER_CODE) String offerCode);

我只得到了空的身体。它正在和邮递员一起工作。

我也搜索了form-dataApplication/x-wow-form-urlencoded,发现如果数据是二进制的,则使用form-data,如果数据是ASCII,则使用Application/x-wow-form-urlencoded

我试图找到表单数据是否不支持改造?

POSTMAN请求

Cache-Control: no-cache
Postman-Token: XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX
Content-Type: multipart/form-data; boundary=----    WebKitFormBoundaryXXXXXXXXXXXX


 ----WebKitFormBoundaryXXXXXXXXXXXX
Content-Disposition: form-data; name="actionId"

1000
 ----WebKitFormBoundaryXXXXXXXXXXXX
Content-Disposition: form-data; name="offerCode"

MYCODE
----WebKitFormBoundaryXXXXXXXXXXXX

我只能添加从POSTMAN截取的HTTP生成的代码


共3个答案

匿名用户

下面是使用请求主体的另一个解决方案:

RequestBody requestBody = new MultipartBody.Builder()
        .setType(MultipartBody.FORM)
        .addFormDataPart("param1", param1)
        .addFormDataPart("param2", param2)
        .build();

apiInterface.somePostMethod(requestBody).enqueue(
    //onResponse onFailure methods
);

这是我的api接口POST方法

@POST("somePostMethod")
Call<ResponseBody> somePostMethod(@Body RequestBody body);

希望能有帮助。

匿名用户

在改装2.0以执行如上所述的POST请求时,您应该像这样对您的参数使用请求体类型。

@Multipart
@POST("XXXX")
Call<PlanResponse> myPlans(@Part(Constants.ACTION_ID) RequestBody actionId, @Part(Constants.OFFER_CODE) RequestBody offerCode);

这里是如何从String获取请求体。

String somevalue = "somevalue";
RequestBody body = RequestBody.create(MediaType.parse("text/plain"), somevalue);

匿名用户

我想向现有请求传递一个ID数组。

我尝试了几个变体从这里,改装-发送请求体作为数组或数字,如何发送PUT请求与改装字符串和数组列表的模型我需要使用URL编码,但他们没有工作。然后我尝试Android改装发送数组作为x-ww-form-urlencoded。

我在列表参数中添加了[],并在其类型中添加了list

@FormUrlEncoded
@POST("your_request/")
fun sendIds(
    @Field("token") token: String,
    @Field("city_id") cityId: Int?,
    @Field("description") description: String,
    @Field("ids[]") ids: List<Int>? // Add '[]' here.
): Deferred<YourResponse>

然后像往常一样称之为(与Kotlin合作):

api.sendIds("f0123abc", null, "description", listOf(1, 2, 3)).await()

请参阅是否可以发送带有Postman Chrome扩展名的数组?了解《邮递员》中的情况。