要将 cookie 标头添加到 okhttp 请求标头中,请在 Interceptor 中添加:
request= request.newBuilder().addHeader("Cookie", sessionIdAndToken).build();
Ref:https://github.com/square/okhttp/wiki/Interceptors@Alexander Mironov 提到的
此处的完整示例代码:希望对您有所帮助
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.List;
public class LoggingInterceptor implements Interceptor {
private static final Logger logger = LoggerFactory.getLogger(LoggingInterceptor.class);
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request request = chain.request();
long t1 = System.nanoTime();
request = processRequest(request);
logger.info("Sending request with url:{} and connection status:{} and request headers:{}",
request.url(), chain.connection(), request.headers());
Response response = chain.proceed(request);
long t2 = System.nanoTime();
logger.info("Received response for url:{} and time taken:{} and response headers as:{}",
response.request().url(), (t2 - t1) / 1e6d, response.headers());
response = processResponse(response);
return response;
}
//Add cookies for all subsequent requests
private Request processRequest(Request request) {
if(!request.url().toString().contains("/v1/authorize")) {
final EmployeeSession session = getSession();
StringBuilder etokenAndUId = new StringBuilder("etoken=");
etokenAndUId.append(session.getEtoken()).append(";").append("uId=").append(session.getUId());
logger.info("inside processRequest for all subsequent requests, sending cookies as etokenAndUId values:{}", etokenAndUId.toString());
request= request.newBuilder().addHeader("Cookie", etokenAndUId.toString()).build();
}
return request;
}
//Extract cookies from login url
private Response processResponse(Response response) {
if(response.request().url().toString().contains("/v1/authorize")) {
final List<String> cookieHeaders = response.headers("Set-Cookie");
String etoken = "", uId = "";
for (String cookieHeader : cookieHeaders) {
if(cookieHeader.contains("etoken=")) {
etoken = cookieHeader.substring(7, cookieHeader.indexOf(';'));
}
else if(cookieHeader.contains("uId=")) {
uId = cookieHeader.substring(4, cookieHeader.indexOf(';'));
}
}
logger.info("inside processResponse found cookies from login url response: etoken:{} and uid:{}", etoken, uId);
setSession(etoken, uId, "c1");
logger.info("current employee session:{}", getSession());
}
return response;
}
}