【问题标题】:Smart way to add parameters' signature with Square's Retrofit使用 Square 的 Retrofit 添加参数签名的智能方法
【发布时间】:2014-12-17 23:39:39
【问题描述】:

`我需要联系一个 API,它要求每个请求都包含所有参数的签名和 url + nonce。

例子:

@GET("/users/{type}")
public void getUsers(
    @Path("type") String type,
    @Query("sort") boolean sort)

我应该添加一个包含signature(nonce+"/users/"+type+"sort="+sort)X-Signature 标头。 我想我可以用RequestInterceptoraddHeader(String name, String value) 来做到这一点,但我不能,因为每个请求的签名都不同。

有没有一种聪明的方法可以用 Retrofit 来做到这一点,还是我只需要手动签署每个请求?

【问题讨论】:

    标签: retrofit


    【解决方案1】:

    我是否认为您的签名是从 [nonce]+[path]+[query params] 生成的

    您可以考虑实现一个自定义客户端并将其传递给您的 RestAdapter.Builder().setClient(new CustomClient) 方法。

    类似CustomClient extends OkClient 的东西,然后覆盖execute(Request) 方法。您需要创建一个新的 Request 对象并将其传递给 super.execute(updatedRequest)

    @Override
    public Response execute(Request request) throws IOException {
        List<Header> headers = new ArrayList<>();
    
        // do work here to parse the request.getUrl() and extract path/params and generate the signature
    
        headers.addAll(request.getHeaders());
        headers.add(new Header("X-Signature", "signature"));
        Request updated = new Request(request.getMethod(), request.getUrl(), headers, request.getBody());
        return super.execute(updated);
    }
    

    但是,如果签名的生成不一致,那么您将需要手动创建签名并在对客户端的调用中添加一个 @Header 值。

    【讨论】:

      猜你喜欢
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      • 2012-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-10
      相关资源
      最近更新 更多