Как получить файлы cookie в "Дооснащении"?
Я читал о запросах перехватчиков и о том, что нет, но не знаю, как их использовать для получения куки файлов... Я отправляю куки файлы так из nodejs...
res.cookie('userid', user._id, { maxAge: 86400000, signed: true, path: '/' });
И в моем клиенте android - у меня есть это до сих пор для моего RestApiManager
public class RestApiManager {
private static final String API_URL = "ip: port";
private static final RestAdapter REST_ADAPTER = new RestAdapter.Builder()
.setEndpoint(API_URL)
.setLogLevel(RestAdapter.LogLevel.FULL)
.build();
//Call interface
public interface AsynchronousApi {
//Login User
@FormUrlEncoded
@POST("/login")
public void loginUser(
@Field("loginName") String loginName,
@Field("password") String password,
Callback<UserResponse> callback);
//Profile Picture
@Multipart
@POST("/profilePicture")
public void uploadProfilePicture(
@Part("photo") TypedFile photo,
@Part("userId") String userId,
Callback<UserResponse> callback); //success thumbnail to picasso
}
//create adapter
private static final AsynchronousApi ASYNCHRONOUS_API = REST_ADAPTER.create(AsynchronousApi.class);
//call service to initiate
public static AsynchronousApi getAsyncApi() {
return ASYNCHRONOUS_API;
}
}
Отдельный класс файлов cookie:
public class ApiCookie implements RequestInterceptor{
// cookie use
private String sessionId;
public ApiCookie() {
}
//COOKIE BELOW
public void setSessionId(String sessionId) {
this.sessionId = sessionId;
}
public void clearSessionId() {
sessionId = null;
}
@Override
public void intercept(RequestFacade requestFacade) {
setSessionId();
}
}
пытается выяснить, как получить файл cookie и отправить его с будущими запросами, поэтому мне не нужно включать поле userId?
Ответы
Ответ 1
У меня была схожая ситуация в моем приложении. Это решение позволяет мне получать файлы cookie с помощью Retrofit.
MyCookieManager.java
import java.io.IOException;
import java.net.CookieManager;
import java.net.URI;
import java.util.List;
import java.util.Map;
class MyCookieManager extends CookieManager {
@Override
public void put(URI uri, Map<String, List<String>> stringListMap) throws IOException {
super.put(uri, stringListMap);
if (stringListMap != null && stringListMap.get("Set-Cookie") != null)
for (String string : stringListMap.get("Set-Cookie")) {
if (string.contains("userid")) {
//save your cookie here
}
}
}
}
Вот как настроить cookie для будущих запросов с помощью RequestInterceptor:
MyCookieManager myCookieManager = new MyCookieManager();
CookieHandler.setDefault(myCookieManager);
private static final RestAdapter REST_ADAPTER = new RestAdapter.Builder()
.setEndpoint(API_URL)
.setLogLevel(RestAdapter.LogLevel.FULL)
.setRequestInterceptor(new RequestInterceptor() {
@Override
public void intercept(RequestFacade requestFacade) {
String userId = ;//get your saved userid here
if (userId != null)
requestFacade.addHeader("Cookie", userId);
}
})
.build();
Ответ 2
Простое решение с использованием lib.
compile 'com.squareup.okhttp3:okhttp-urlconnection:3.2.0'
.
JavaNetCookieJar jncj = new JavaNetCookieJar(CookieHandler.getDefault());
OkHttpClient.Builder().cookieJar(jncj).build();