Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android,如何通过HttpClient()从URL获取cookie?_Java_Android_Cookies_Android Cookiemanager - Fatal编程技术网

Java Android,如何通过HttpClient()从URL获取cookie?

Java Android,如何通过HttpClient()从URL获取cookie?,java,android,cookies,android-cookiemanager,Java,Android,Cookies,Android Cookiemanager,我有一个登录活动,我必须为我的网站创建一个post请求,以便用户登录到我的移动应用程序。要在我的网站上创建帖子请求,我需要csrf cookie作为参数,这意味着我必须首先从URL获取cookie,然后使用csrf值创建帖子请求 这是我的密码: HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost("http://192.168.178.163:8080/login/"

我有一个登录活动,我必须为我的网站创建一个post请求,以便用户登录到我的移动应用程序。要在我的网站上创建帖子请求,我需要csrf cookie作为参数,这意味着我必须首先从URL获取cookie,然后使用csrf值创建帖子请求

这是我的密码:

        HttpClient client = new DefaultHttpClient();

        HttpPost post = new HttpPost("http://192.168.178.163:8080/login/");

        try {

            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
            nameValuePairs.add(new BasicNameValuePair("username", "xxx"));
            nameValuePairs.add(new BasicNameValuePair("password", "yyy"));
            //csrfmiddlewaretoken
            String res = null;

            post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = client.execute(post);
            res = response.toString();
            res = res.replaceAll("\\s+","");
            BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

            String line = "";
            while ((line = rd.readLine()) != null) {
                Log.i("line", line);
                //System.out.println(line);
                if (line.startsWith("csrftoken=")) {
                    String key = line.substring(5);
                    Log.i("key", key);
                }

            }
        }
        catch (IOException e) {
            txt_Error.setText(e.toString());
        }
HttpClient=newdefaulthttpclient();
HttpPost=新的HttpPost(“http://192.168.178.163:8080/login/");
试一试{
List nameValuePairs=新的ArrayList(1);
添加(新的BasicNameValuePair(“用户名”,“xxx”));
添加(新的BasicNameValuePair(“密码”,“yyy”));
//csrfmiddlewaretoken
字符串res=null;
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
HttpResponse response=client.execute(post);
res=response.toString();
res=res.replaceAll(“\\s+”,”);
BufferedReader rd=新的BufferedReader(新的InputStreamReader(response.getEntity().getContent());
字符串行=”;
而((line=rd.readLine())!=null){
Log.i(“行”,行);
//系统输出打印项次(行);
if(line.startsWith(“csrftoken=”)){
字符串键=行。子字符串(5);
Log.i(“key”,key);
}
}
}
捕获(IOE异常){
txt_Error.setText(例如toString());
}
知道怎么做吗?我已经读过CookieSyncManager,但我一点也不懂。。。任何想法或代码示例都将是正确的

HttpClient=new DefaultHttpClient();
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://192.168.178.163:8080/login/");
CookieStore cookieStore = new BasicCookieStore();
HttpContext context = new BasicHttpContext();
context.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
...
HttpResponse response = client.execute(post, context);
List<Cookie> cookies = cookieStore.getCookies();
CookieMonster.eat(cookies); // :)
HttpPost=新的HttpPost(“http://192.168.178.163:8080/login/"); CookieStore CookieStore=新的BasicCookieStore(); HttpContext=新的BasicHttpContext(); setAttribute(ClientContext.COOKIE_存储,cookieStore); ... HttpResponse response=client.execute(post,context); List cookies=cookieStore.getCookies(); 吃(饼干);/:)
HttpClient-client=新的DefaultHttpClient();
HttpPost=新的HttpPost(“http://192.168.178.163:8080/login/");
CookieStore CookieStore=新的BasicCookieStore();
HttpContext=新的BasicHttpContext();
setAttribute(ClientContext.COOKIE_存储,cookieStore);
...
HttpResponse response=client.execute(post,context);
List cookies=cookieStore.getCookies();
吃(饼干);/:)

第一件事是获得csrftoken(正如您在问题中提到的)。另外,您还必须在post请求中将csrftoken作为数据发布,后端将根据cookie和post数据进行检查/匹配

例如,对于django后端,您必须添加以下内容:

nameValuePairs.add(new BasicNameValuePair("csrfmiddlewaretoken", "OBTAINED_TOKEN"));
如果从
http://192.168.178.163:8080/login/
返回一个表单,您可以检查源代码,它可能包含一个隐藏字段,其中包含您需要发送的令牌的名称/值

  • 因此,基本上为
    http://192.168.178.163:8080/login/
  • 将cookies提取为字符串
  • 用于复制cookies
  • 创建您的post请求

希望这有帮助

第一件事是获得csrftoken(正如您在问题中提到的)。另外,您还必须在post请求中将csrftoken作为数据发布,后端将根据cookie和post数据进行检查/匹配

例如,对于django后端,您必须添加以下内容:

nameValuePairs.add(new BasicNameValuePair("csrfmiddlewaretoken", "OBTAINED_TOKEN"));
如果从
http://192.168.178.163:8080/login/
返回一个表单,您可以检查源代码,它可能包含一个隐藏字段,其中包含您需要发送的令牌的名称/值

  • 因此,基本上为
    http://192.168.178.163:8080/login/
  • 将cookies提取为字符串
  • 用于复制cookies
  • 创建您的post请求

希望这有助于

如果收到页面,cookies位于页眉中。你在这个网站上搜索这些cookie了吗?按cookies按钮,您将找到。这正是我需要的,但我没有找到:(请参阅此帖子,希望它有帮助:如果收到页面,cookies位于标题中。您是否搜索此网站以提取这些cookies?按cookies按钮,您将找到。这正是我需要的,但我没有找到:(看这篇文章,希望它能帮上忙:嗨!!谢谢你的回答,吃饼干的有趣部分哈哈哈….:D…还有一个问题,我必须从我的上下文中提取饼干,并将其作为带有用户名和密码的参数传递,知道吗?:)由于使用了csrf,您可能需要首先执行get请求以获取令牌和cookie数据,然后在post请求中使用它。您好!!谢谢您的回答,吃cookie的部分很有趣哈哈哈….:D…还有一个问题,我必须从我的上下文中提取cookie,并将其作为带有用户名和密码的参数传递,有什么想法吗?:)由于使用了csrf,您可能需要首先执行get请求以获取令牌和cookie数据,然后在post请求中使用它。