`我需要联系一个API,要求每个请求都包含所有参数的签名和url + nonce。
示例:
@GET("/users/{type}")
public void getUsers(
@Path("type") String type,
@Query("sort") boolean sort)
我应添加包含X-Signature
的{{1}}标头。
我认为我可以使用signature(nonce+"/users/"+type+"sort="+sort)
RequestInterceptor
执行此操作,但我不能签名因每个请求而异。
使用Retrofit是否有一种聪明的方法可以做到这一点,或者我只需要手动签署每个请求?
答案 0 :(得分:3)
我认为您的签名是从[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值。