使用URL编码正文和用户身份验证对Post Request进行改进

时间:2015-09-15 07:38:53

标签: retrofit okhttp

我正在尝试使用带有键值(&分隔)有效负载和简单用户身份验证的改造来创建请求,因为它可以在以下curl命令中完成:

curl -X POST -d "grant_type=refresh_token&refresh_token=<refresh_token>" -u"<client_id>:<client_secret>" http://localhost:8000/o/token/

如何在提供上述数据的改造中创建请求?如果使用的话,我需要接口方法和RequestBody的创建。

更新

我使用了以下代码

接口方法定义:

@POST("/o/token/")
Observable<ServerToken> refreshAccessToken(@Header("Authorization") String auth, @Body RequestBody tokens);

调用实现:

    RequestBody body = new FormEncodingBuilder()
            .add("grant_type", "refresh_token")
            .add("refresh_token", serverToken.refresh_token)
            .build();

    String auth = Credentials.basic("<client_id>", "<client_secret>");
    mTokenApi.refreshAccessToken(auth, body)

但我在请求中得到Content-Type: application/json并且请求空白。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

正确的做法是:

接口方法定义:

RestClient.get 'https://username:password@stash.address.net/rest/api/1.0/projects/FOOBAR/repos', { accept: :json, params: { limit: 1000 }}

调用实现:

@FormUrlEncoded
@POST("/o/token/")
Observable<ServerToken> refreshAccessToken(@Header("Authorization") String auth,
                                           @Field("grant_type") String grantType,
                                           @Field("refresh_token") String refreshToken);