我有登录API的请求
Call<TokenJSONModel> login(@Header("Authorization") CredentialsModel credentials, @Field("access_token") String authKey );
authKey为x-www-form-urlencoded
所以我加了
@FormUrlEncoded
在POST
之前,但仍收到400 Bad Request
。
我有点笨拙,调试中的args是带有{Basic“前缀的corect credentials
,但是authKey
没有access_token前缀。
在邮递员中,一切正常,我收到token
和user
。
我尝试过:
Call<TokenJSONModel> call = RetrofitClient.getInstance().getApi().login(credentials, "access_token:"+authKey));
但没有任何改变。
如果凭据或令牌不正确,我应该401 unauthorized
收到201 Created
。
来自api的日志:
2019-06-04T19:17:06.796534+00:00 app[web.1]: POST /auth 400 0.477 ms - -
2019-06-04T19:17:07.068321+00:00 heroku[router]: at=info method=POST path="/auth" my_webserver.com request_id=5c4efe45-5d54-4fde-8420-d0fcb3338558 fwd="148.81.117.54" dyno=web.1 connect=1ms service=3ms status=400 bytes=188 protocol=https
2019-06-04T19:17:07.069147+00:00 app[web.1]: POST /auth 400 0.519 ms - -
2019-06-04T19:17:17.711709+00:00 app[web.1]: POST /auth 201 43.530 ms - 393
2019-06-04T19:17:17.713351+00:00 heroku[router]: at=info method=POST path="/auth" my_webserver.com request_id=3ff2fdea-c23b-40ef-8f62-acc410068007 fwd="148.81.117.54" dyno=web.1 connect=0ms service=45ms status=201 bytes=662 protocol=https
第一个是针对Android改装请求的,第二个是来自邮递员的。 我注意到android请求比邮递员的请求小3.5倍-为什么?
答案 0 :(得分:0)
好的,我找到了解决方案。 添加后
@Headers({
"Content-Type: application/x-www-form-urlencoded",
"accept-encoding: gzip, deflate",
"access_token: mtlNzTVmXP4IBSba3z4XXXX",
"Authorization: Basic a2FtaWwua2ljaW5za2lAc3R1ZGVudC53YXQuZXXX"
})
@FormUrlEncoded
@POST("/auth")
我注意到一切正常。当服务器需要单独的字符串时,我在请求中传递的凭据被视为对CredentialsModel对象的引用,其中包含String。我是通过以下方式解决的:
@FormUrlEncoded
@POST("/auth")
Call<ResponseBody> login(@Header("Authorization") String credentials, @Field("access_token") String authKey );
和
Call<ResponseBody> call = RetrofitClient.getInstance().getApi().login(Credentials.basic(email, password),authKey);