我需要知道如何在改造中添加授权cookie头.我已经看过使用请求截取等的建议.以下是我正在尝试的,但这是正确的吗?首先,我已经需要一个RequestAdatper来第一次获取会话ID.这只能由请求适配器的构建器设置.但我需要提出一个请求才能获得会话ID.我需要两个休息适配器,一个用于获取sessionId,另一个用于获取它之后.我真正需要的是一个适配器上的方法,在我得到它之后设置cookie,但它似乎不是这样的方法.这变得很尴尬.如何在改造中设置授权cookie?我在常见问题解答或教程中没有看到这一点.
RequestInterceptor requestInterceptor = new RequestInterceptor()
{
@Override
public void intercept(RequestFacade request) {
request.addHeader("Set-Cookie", "sessionId="+sessionIdentifier);
}
};
RestAdapter.Builder().setServer(serverURL)..setRequestIntercepter(requestIntercepter).build();
// but I don't have sessionId when this is first issued ???
Run Code Online (Sandbox Code Playgroud) 因此,当我登录到我的服务器端应用程序时,它给了我一个cookie,允许我在未来的请求中说"嘿,这是我".我曾经使用Android的默认HttpClient类做到这一点,并且效果很好.但是我被告知Retrofit要快得多,并且通过实现GSON来避免处理JSON解析,所以我想我会尝试一下.
我构建了我的客户端,我可以发出请求,但是,我的客户端并没有"记住会话密钥,因此我无法做任何事情.有谁知道如何告诉改造"接受和用户cookie为未来的请求"?我迷路了!任何建议都会做:)
public class ApiClient{
private static final String API_URL = "http://192.168.1.25:8080";
private static RestAppApiInterface sRestAppService;
public static RestAppApiInterface getRestAppApiClient() {
if (sRestAppService == null) {
CookieManager cookieManager = new CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
CookieHandler.setDefault(cookieManager);
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(API_URL)
.build();
sRestAppService = restAdapter.create(RestAppApiInterface.class);
}
return sRestAppService;
}
}
Run Code Online (Sandbox Code Playgroud) 我们,我正在使用改造,我想知道如何透明地处理会话cookie.为此我扩展了给定的ApacheClient并在自定义调用ApacheClient.execute(HttpClient,HttpUriRequest)中使用CookieStore:
Client client = new ApacheClient() {
final CookieStore cookieStore = new BasicCookieStore();
@Override
protected HttpResponse execute(HttpClient client, HttpUriRequest request) throws IOException {
// BasicHttpContext is not thread safe
// CookieStore is thread safe
BasicHttpContext httpContext = new BasicHttpContext();
httpContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
return client.execute(request, httpContext);
}
};
RestAdapter restAdapter = new RestAdapter.Builder()
.setServer(API_URL)
.setClient(client)
.build();
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来使用内置改造API(没有HttpClient扩展)?