【发布时间】:2021-03-17 04:58:06
【问题描述】:
当请求通过 Postman 发送时,我可以看到它在响应标头中发送所有 Set-Cookie。示例:
Set-Cookie : wfwaf-authcookie-b52dd4381520%...... expires=Fri, 04-Dec-2020 23:32:21 GMT; Max-Age=43200; path=/; secure; HttpOnly
Set-Cookie : woocommerce_items_in_cart=1; path=/
Set-Cookie : woocommerce_cart_hash=92e2c.......; path=/
Set-Cookie : wp_cocart_session_a9339f....; expires=Fri, 11-Dec-2020 11:32:21 GMT; Max-Age=604800; path=/; secure; HttpOnly
但在 Retrofit 中,我只得到其中的 2 个。不是全部 4。 请求地址为:https://mywpwebsite.com/wp-json/wc/store/cart
我调用改造请求的代码:
public MutableLiveData<Resource<Cart> > getCartItems(HashMap<String,String> attribs, HashMap<String,String> headers) {
Log.d(TAG, "get cart items: being called");
final MutableLiveData cartitems = new MutableLiveData<>();
WCService service = getRetrofitInstance().create(WCService.class);
Call<Cart> call = service.getCartItems(attribs,headers);
call.enqueue(new Callback<Cart>() {
@Override
public void onResponse(Call<Cart> call, Response<Cart> response) {
Log.d(TAG,"fetched cartitems");
Log.d(TAG,"responsecode:"+response.code());
Log.d(TAG, "onResponse: headers: "+response.headers().toString());
Log.d(TAG, "onResponse: cookie : " + response.headers().toMultimap() .get("Set-Cookie").toString());
if (response.code() == 200) {
if (response.body() != null)
cartitems.setValue(WCRepository.Resource.success(response.body()));
else
cartitems.setValue(WCRepository.Resource.error("Something went wrong, please refresh", null));
} else {
try {
errorResponse er = new Gson().fromJson(response.errorBody().string(), errorResponse.class);
cartitems.setValue(WCRepository.Resource.error(er.getMessage(), er.getMessage()));
} catch (Exception e) {
cartitems.setValue(WCRepository.Resource.error("error: "+ e.getMessage(), null));
}
}
}
@Override
public void onFailure(Call<Cart> call, Throwable t) {
cartitems.setValue(null);
Log.d(TAG, "onFailure: "+t.getMessage());
}
});
return cartitems;
}
和
@GET("store/cart?")
Call<Cart> getCartItems(@QueryMap() Map<String,String> params, @HeaderMap() Map<String,String> headers);
【问题讨论】:
-
贴一些相关代码
-
编辑了问题。请让我知道这是否足够
-
设置cookie:woocommerce_items_in_cart=0; expires=星期六,2020 年 12 月 5 日 08:47:09 GMT;最大年龄=0;路径=/设置cookie:woocommerce_cart_hash=0; expires=星期六,2020 年 12 月 5 日 08:47:09 GMT;最大年龄=0; path=/ 作为回应,我只将两个标题作为 "Set-Cookie" 。但是,如果我通过 POSTMAN 发出请求,我可以看到另外两个“Set-Cookie”标头
-
github.com/square/okhttp/tree/master/okhttp-logging-interceptor 你可以使用okhttp登录拦截器记录响应
-
看起来这些标头可能与会话身份验证相关联,适用于浏览器登录交互,但不适用于应用请求。
标签: android wordpress retrofit okhttp woocommerce-rest-api