gpt4 book ai didi

android - 如何将 Cookie session id 放入 volley request 中?

转载 作者:IT老高 更新时间:2023-10-28 23:25:19 30 4
gpt4 key购买 nike

所以,我有这段代码可以通过 volley 发出 POST 请求:

public class MainActivity extends AppCompatActivity {

Button btnSearch;
ProgressDialog loadingDialog;
ListView lvResult;
String session_id;
RequestQueue queue;
MyCookieManager myCookieManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btnSearch = (Button) findViewById(R.id.btnSearch);
lvResult = (ListView) findViewById(R.id.lvResult);
loadingDialog = new ProgressDialog(MainActivity.this);
loadingDialog.setMessage("Wait.\nLoading...");
loadingDialog.setCancelable(false);
myCookieManager = new MyCookieManager();

requestCookie(); //FIRST CALL TO GET SESSION ID

btnSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showLoading();
requestWithSomeHttpHeaders(); //CALL TO MAKE THE REQUEST WITH VALID SESSION ID
}
});

}

public void requestCookie() {
queue = Volley.newRequestQueue(this);
String url = "http://myurl.com/json/";

StringRequest postRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener < String > () {
@Override
public void onResponse(String response) {
//
String x = myCookieManager.getCookieValue();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("ERROR", "Error => " + error.toString());
hideLoading();
}
}
) {
@Override
public byte[] getBody() throws AuthFailureError {
String httpPostBody = "param1=XPTO&param2=XPTO";
return httpPostBody.getBytes();
}

@Override
public Map < String, String > getHeaders() throws AuthFailureError {
Map <String, String> params = new HashMap < String, String > ();
params.put("User-Agent", "Mozilla/5.0");
params.put("Accept", "application/json, text/javascript, */*; q=0.01");
params.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
//params.put("Set-Cookie", session_id);// + " _ga=GA1.3.1300076726.1496455105; _gid=GA1.3.1624400465.1496455105; _gat=1; _gali=AguardeButton");
//"PHPSESSID=ra0nbm0l22gsnl6s4jo0qkqci1");
return params;
}

protected Response <String> parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
String header_response = String.valueOf(response.headers.values());
int index1 = header_response.indexOf("PHPSESSID=");
int index2 = header_response.indexOf("; path");
//Log.e(Utils.tag, "error is : " + index1 + "::" + index2);
session_id = header_response.substring(index1, index2);

return Response.success(jsonString, HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
}
}
};

queue.add(postRequest);
}

public void requestWithSomeHttpHeaders() {
queue = Volley.newRequestQueue(this);
String url = "http://myurl.com/json/";

StringRequest postRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener <String> () {
@Override
public void onResponse(String response) {
Log.d("Response", response);
String x = myCookieManager.getCookieValue();
String status = "";

try {
JSONObject resultObject = new JSONObject(response);
Log.d("JSON RESULT =>", resultObject.toString());
} catch (JSONException e) {
Toast.makeText(MainActivity.this, "Request Error", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}

hideLoading();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("ERROR", "Error => " + error.toString());
hideLoading();
}
}
) {
@Override
public byte[] getBody() throws AuthFailureError {
String httpPostBody = "param1=XPTO&param2=XPTO";
return httpPostBody.getBytes();
}

@Override
public Map <String, String> getHeaders() throws AuthFailureError {
Map <String, String> params = new HashMap <String, String> ();
params.put("User-Agent", "Mozilla/5.0");
params.put("Accept", "application/json, text/javascript, */*; q=0.01");
params.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
params.put("Cookie", /*myCookieManager.getCookieValue()*/ session_id + "; _ga=GA1.3.1300076726.1496455105; _gid=GA1.3.1624400465.1496455105; _gat=1; _gali=AguardeButton");
return params;
}
};

queue.add(postRequest);
}

private void showLoading() {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (!loadingDialog.isShowing())
loadingDialog.show();
}
});
}

private void hideLoading() {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (loadingDialog.isShowing())
loadingDialog.dismiss();
}
});
}
}

如果我发送一个有效的 cookie ID,则返回一个有效的 JSON 对象,否则返回一个空对象。

我尝试(未成功)设置默认 cookie 句柄,如

CookieManager manager = new CookieManager();
CookieHandler.setDefault(manager);

但我得到一个空对象。

如何将有效的 cookie session ID 用于发布请求?

最佳答案

所以问题在于获取有效的 cookie。我的错误是从 POST 请求本身中获取它。我保持相同的工作原理,在启动应用程序时获取 cookie,但使用 GET 而不是 POST,并调用 URL 的根而不是获取 JSON 的地址。

我的解决方案如下所示:

public void requestCookie() {
queue = Volley.newRequestQueue(this);
String url = "http://myurl.com/";

StringRequest getRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener <String> () {
@Override
public void onResponse(String response) {
String x = myCookieManager.getCookieValue();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("ERROR", "Error => " + error.toString());
hideLoading();
}
}
) {
protected Response <String> parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
String header_response = String.valueOf(response.headers.values());
int index1 = header_response.indexOf("PHPSESSID=");
int index2 = header_response.indexOf("; path");
//Log.e(Utils.tag, "error is : " + index1 + "::" + index2);
session_id = header_response.substring(index1, index2);

return Response.success(jsonString, HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
}
}
};

queue.add(getRequest);
}

关于android - 如何将 Cookie session id 放入 volley request 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44273674/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com