关于这一点的许多不同的问题,但我的有点不同。
我需要从现有网站进行一种“屏幕抓取”。我登录到该网站。在我的shareprefs中保存cookie变量并使用它来浏览网站并通过收集输入字段和值在我的应用程序中显示我想要它的方式。
反正。到现在为止还挺好。我能登录 - >保存cookie - >以登录用户的身份阅读网站。
问题:在同一个网站上进行POST。在这里,cookie似乎在某个地方迷失了。网站无法阅读或不批准。
// onCreate
protected void onCreate(Bundle savedInstanceState) {
CookieHandler.setDefault(new CookieManager());
SESSIONID = "Cookievariable";
loadWebSite();
}
// Read website
private void loadWebSite(){
String url = "http://somewebsite";
RequestQueue queue = Volley.newRequestQueue(act);
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>()
{
@Override
public void onResponse(String response) {
// Website loaded OK!
}
},
) {
// Set headers
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("Cookie", SESSIONID);
Log.d("PARAMS", params.toString());
return params;
}
};
queue.add(stringRequest);
}
// Later on - Send post when button clicked
private void sendPost(){
String url = "http://somewebsite";
RequestQueue queue = Volley.newRequestQueue(act);
StringRequest postRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>()
{
@Override
public void onResponse(String response) {
// POST SENT - But something wrong with session.
}
},
) {
// Set POST params
@Override
public Map<String, String> getParams() throws AuthFailureError {
Map<String, String> postParams = new HashMap<>();
postParams.put("SomeParam", "Someparamhere");
return postParams;
}
// Set headers
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("Cookie", SESSIONID);
Log.d("PARAMS", params.toString());
return params;
}
};
queue.add(postRequest);
}
答案 0 :(得分:0)
回答我自己的问题:问题与cookieHandler有关。
我将它从片段中移出并进入我的主要活动/导航活动,它似乎可以解决问题。
CookieHandler.setDefault(new CookieManager());