我试图到达一个需要表单数据的端点,而邮递员可以通过以下命令获得200,请注意,我已将URL替换为/url
,将api键替换为key
,使用host
的主机和使用referrer
的引荐来源网址,但它们都是准确的,并且在两种情况下都匹配。
当看邮递员生成的代码时,我会看到
POST /url?api_key=key HTTP/1.1
Host: host
Accept: application/json, text/javascript, */*; q=0.01
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Referer: referrer
cache-control: no-cache
Postman-Token: 00ad8c82-be8a-4c0d-a79b-fd7e3e941430
Content-Disposition: form-data; name="user[first_name]"
first
Content-Disposition: form-data; name="user[last_name]"
last
Content-Disposition: form-data; name="user[email]"
flast@gmail.com
Content-Disposition: form-data; name="user[terms_and_conditions]"
1
------WebKitFormBoundary7MA4YWxkTrZu0gW--
但是,通过翻新,我不断收到422,并且来自Stetho的请求看起来像这样
Request URL: /url?api_key=key
Request Method:POST
Request Headers
Provisional headers are shown
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip
Connection:Keep-Alive
Content-Length:563
Content-Type:multipart/form-data;
Host: host
Referer: referrer
User-Agent:okhttp/3.10.0
Query String Parameters
api_key: key
Request Payload
--b9048dea-56eb-4fad-8436-b1d70b753bb1
Content-Disposition: form-data; name="user[first_name]"
Content-Length: 5
first
--b9048dea-56eb-4fad-8436-b1d70b753bb1
Content-Disposition: form-data; name="user[last_name]"
Content-Length: 4
last
--b9048dea-56eb-4fad-8436-b1d70b753bb1
Content-Disposition: form-data; name="user[email]"
Content-Length: 15
flast@gmail.com
--b9048dea-56eb-4fad-8436-b1d70b753bb1
Content-Disposition: form-data; name="user[terms_and_conditions]"
Content-Length: 1
1
--b9048dea-56eb-4fad-8436-b1d70b753bb1--
我尝试使用多部分请求正文
@POST("/url")
@Headers(
"Accept: application/json, text/javascript, */*; q=0.01",
"Content-Type: multipart/form-data;",
"Referer: referrer"
)
fun signUp(
@Query("api_key") apiKey: String,
@Body requestBody : RequestBody
): Single<NetworkResponse<AuthResponse, Error>>
我还尝试使用@PartMap(具有相同的标题)
@Multipart
fun signUp(
@Query("api_key") apiKey: String,
@PartMap map: Map<String, String>
): Single<NetworkResponse<AuthResponse, Error>>
最后,我尝试在服务中使用多个@Part字段(具有相同的标题)
@Multipart
fun signUp(
@Query("api_key") apiKey: String,
@Part("user[first_name") firstName: RequestBody,
@Part("user[first_name") lastName: RequestBody,
@Part("user[first_name") email: RequestBody,
@Part("user[first_name") toc: RequestBody
): Single<NetworkResponse<AuthResponse, Error>>
这些选项似乎都不起作用,或者给我的结果与Postman相同。我看到的区别是,这些部分的内容长度经过改进,并且之间存在这些随机字符串分隔符。
我不拥有api,因此无法更改它。
编辑我按照以下答案中的说明删除了Content-Length,但仍然得到422。输出现在看起来像这样,带有相同的标题。所以似乎最后剩下的区别是那些随机字符串
--5d70bd2c-10e7-4444-84bc-aab7cb3e86ee
Content-Disposition: form-data; name="user[first_name]"
Zachary
--5d70bd2c-10e7-4444-84bc-aab7cb3e86ee
Content-Disposition: form-data; name="user[last_name]"
sweigart
--5d70bd2c-10e7-4444-84bc-aab7cb3e86ee
Content-Disposition: form-data; name="user[email]"
zsweigart@gmail.com
--5d70bd2c-10e7-4444-84bc-aab7cb3e86ee
Content-Disposition: form-data; name="user[terms_and_conditions]"
1
--5d70bd2c-10e7-4444-84bc-aab7cb3e86ee--