gpt4 book ai didi

android - 从 WebView 到 HttpClient 的共享 cookies/session 不起作用

转载 作者:行者123 更新时间:2023-11-30 04:03:03 25 4
gpt4 key购买 nike

我知道这个问题已经被问了一百次了,我已经阅读并尝试了 2 个小时,但我找不到我的错误:-(

我正在尝试创建一个简单的网络浏览器,因此有一个 WebView ,我可以在其中登录网站并访问图片区域。在 DefaultHttpClient 的帮助下,我希望能够在安全区域下载图片。因此,我试图从 webview 共享 cookie 并将它们传递给 HttpClient,以便它经过身份验证并能够下载。但无论我尝试做什么,我总是会收到 403 响应...

基本步骤如下:

1)输入URL,webview加载网站

2) 在表单中输入登录信息

3) 导航到图片并长按上下文菜单

4) 检索图像 URL 并将其传递给 AsynTask 进行下载

这是带有 Cookie 内容的 AsyncTask 的代码:

protected String doInBackground(String... params) {

//params[0] is the URL of the image

try
{

CookieManager cookieManager = CookieManager.getInstance();

String c = cookieManager.getCookie(new URL(params[0]).getHost());

BasicCookieStore cookieStore = new BasicCookieStore();
BasicHttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
String[] cookieParts = null;
String cookies[] = null;

cookies = c.split(";");

for(int i=0;i<cookies.length;i++)
{
cookieParts = cookies[i].split("=");
BasicClientCookie sessionCookie = new BasicClientCookie(cookieParts[0].trim(), cookieParts[1].trim());
sessionCookie.setDomain(new URL(params[0]).getHost());

cookieStore.addCookie(sessionCookie);
}


DefaultHttpClient httpClient = new DefaultHttpClient();

httpClient.setCookieStore(cookieStore);

HttpGet pageGet = new HttpGet(new URL(params[0]).toURI());


HttpResponse response = httpClient.execute(pageGet, localContext);
if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK)

--> 永远不会发生,总是得到 403

.) 问题之一是 webview 为主机 *www.*example.com 保存了一些 cookie,但要下载的图像 URL(参数 [0])是 *< em>静态。*example.com。线cookieManager.getCookie(新 URL(params[0]).getHost());返回 null,因为没有 static.example.com 的 cookie,只有 www.example.com。

.) 当我手动说 cookieManager.getCookie("www.example.com");我取回了一些 cookie,并将其添加到 HttpClient cookie 存储中:添加了 5 个 cookie- 测试cookie = 0- PHPSESSID = 320947238someGibberishSessionId- 电子邮件 = my@email.net- 通过 = 32423te32someEncodedPassGibberish- 用户 = 345542

因此,尽管这些 cookie、 session ID 和其他内容已添加到 HttpClient,但它永远无法下载图像。我完全迷失了……尽管我猜想这要么与 cookie 域有关,要么我仍然缺少其他 cookie。

但是当我必须指定一个特定的 URL 来取回 cookie 时,我到底应该从哪里知道 webview 中存在哪些 cookie? :-(

有什么建议吗?

最佳答案

我想我们在上面的代码 fragment 中把它弄得太复杂了。使用这些简单的步骤 -

1)从 webView 中检索 cookie - 无论您的 webview 在哪里,都使用此代码重新

String cookie = CookieManager.getInstance().getCookie(
url.toString());
Log.d("mytcs", "cookie downloadlistner " + cookie);

2) 使用参数将其传递到您下载的 asyncTask 中 -

downloadImageTask = new DownloadImage();
downloadPDFTask.execute(url, cookie);

(我假设您知道在 asyncTask 中检索此 cookie,您将使用 params[1],

3) 在您的 http 请求中使用设置此 cookie -

if (cookie != null)
con.setRequestProperty("cookie", cookie);

其中 con 是 HttpURLConnection con;

因此您可以根据需要在 HttpGet 中进行设置。

关于android - 从 WebView 到 HttpClient 的共享 cookies/session 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12186865/

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