Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
对Django服务器的Java Post请求-->;403错误代码_Java_Django_Cookies - Fatal编程技术网

对Django服务器的Java Post请求-->;403错误代码

对Django服务器的Java Post请求-->;403错误代码,java,django,cookies,Java,Django,Cookies,我是Java新手,我有一个小项目作为学习任务。 第一部分很简单,但现在我卡住了 我想通过Java中的post请求获得一些网站信息。 但棘手的部分是crsf保护,我不知道如何处理它,因为如果我尝试发出POST请求,我会得到错误代码: 服务器为URL返回了HTTP响应代码:403: 我被告知,我必须通过get请求获得csrf令牌,并将该令牌用于post请求,以告诉保护系统我不是机器人 所以我这样做了: URL url = new URL(http://v1stats.desy.de:8080);

我是Java新手,我有一个小项目作为学习任务。 第一部分很简单,但现在我卡住了

我想通过Java中的post请求获得一些网站信息。 但棘手的部分是crsf保护,我不知道如何处理它,因为如果我尝试发出POST请求,我会得到错误代码: 服务器为URL返回了HTTP响应代码:403:

我被告知,我必须通过get请求获得csrf令牌,并将该令牌用于post请求,以告诉保护系统我不是机器人

所以我这样做了:

URL url = new URL(http://v1stats.desy.de:8080);
        try {

                URLConnection conn = url.openConnection();
                Map<String, List<String>> map = conn.getHeaderFields();

                for (Map.Entry entry : map.entrySet()) {
                    System.out.println(entry.getKey() + ": " + entry.getValue());
                }

                token = map.get("Set-Cookie").toString();
                token = (String) token.subSequence(1, token.indexOf(";"));

            } catch (Exception e) {
                e.printStackTrace();
            }
在那之后,我有代币

我的邮政申请代码如下:

Map<String,Object> params = new LinkedHashMap<>();

     params.put("start", "27/10/2015");
     params.put("end", "27/10/2015");
     params.put("room", "Basketballfeld");
     params.put("organizer", "");
     params.put("eventname", "");
     params.put("description", "");

     StringBuilder postData = new StringBuilder();
     for (Map.Entry<String,Object> param : params.entrySet()) {
         if (postData.length() != 0) 
             postData.append('&');
         postData.append(URLEncoder.encode(param.getKey(), "UTF-8") + "=");           
         postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
     }

     System.out.println(postData);
     byte[] postDataBytes = postData.toString().getBytes("UTF-8");

     HttpURLConnection conn = (HttpURLConnection)url.openConnection();

     conn.setRequestMethod("POST");
     conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
     conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
     conn.setDoOutput(true);
     conn.getOutputStream().write(postDataBytes);

     Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
有谁能告诉我我必须做什么,发送crsf令牌和请求,以确保Django服务器响应我想要的数据? 还是我的所作所为完全错了

我在网上搜索了很多,但我找不到解决办法-(

(这是肯定的,因为我不知道该怎么做,也不知道该搜索什么) 谢谢你的帮助

Map<String,Object> params = new LinkedHashMap<>();

     params.put("start", "27/10/2015");
     params.put("end", "27/10/2015");
     params.put("room", "Basketballfeld");
     params.put("organizer", "");
     params.put("eventname", "");
     params.put("description", "");

     StringBuilder postData = new StringBuilder();
     for (Map.Entry<String,Object> param : params.entrySet()) {
         if (postData.length() != 0) 
             postData.append('&');
         postData.append(URLEncoder.encode(param.getKey(), "UTF-8") + "=");           
         postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
     }

     System.out.println(postData);
     byte[] postDataBytes = postData.toString().getBytes("UTF-8");

     HttpURLConnection conn = (HttpURLConnection)url.openConnection();

     conn.setRequestMethod("POST");
     conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
     conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
     conn.setDoOutput(true);
     conn.getOutputStream().write(postDataBytes);

     Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
start=27%2F10%2F2015&end=27%2F10%2F2015&room=Basketballfeld&organizer=&eventname=&description=