HttpClient 调用远程服务,POST 请求 ,x-csrf-token验证失败,报CSRF token validation failed 问题解决

原创 2018年04月17日 17:52:39

首先通过 HttpGet 来获取x-csrf-token,代码如下:

HttpGet httpget = new HttpGet(url);
httpget.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
httpget.setHeader("Authorization", code);
httpget.setHeader("x-csrf-token", "fetch");
Header headers[] = httpget.getAllHeaders();
HttpClient httpclient = new DefaultHttpClient();
HttpResponse res = httpclient.execute(httpget);

遍历headers,得到 cookies和x-csrf-token值

headers = res.getAllHeaders();
for (Header h : headers) {
   if (h.getName().equals("set-cookie")) {
      Token = Token+h.getValue()+";";
   }
   if (h.getName().equals("x-csrf-token")) {
      Token = Token+";"+h.getValue();
   }
}

post调用方法如下:

HttpClient client = new DefaultHttpClient();
      HttpPost post = new HttpPost(url);

      
      post.addHeader("Content-Type", "application/json");
      post.addHeader("Authorization", "******");    //用户密码验证的
      post.setHeader("X-CSRF-Token", Token.split(";;")[1]);
      post.setHeader("cookie", Token.split(";;")[0]);
      String result = "";

      try {
         StringEntity s = new StringEntity(json, "utf8");
         s.setContentType(new BasicHeader("Content-Type",
               "application/json"));
         post.setEntity(s);
         // 发送请求
         HttpResponse httpResponse = client.execute(post);

         // 获取响应输入流
         InputStream inStream = httpResponse.getEntity().getContent();
         BufferedReader reader = new BufferedReader(new InputStreamReader(inStream, "utf-8"));
         StringBuilder strber = new StringBuilder();
         String line = null;
         while ((line = reader.readLine()) != null)
            strber.append(line + "\n");
         inStream.close();
         result = strber.toString();
         if (httpResponse.getStatusLine().getStatusCode() == 201) {
            System.out.println("请求服务器成功,做相应处理");
         } else {
            System.out.println("请求服务端失败");
         }
      } catch (Exception e) {
         System.out.println("请求异常");
         throw new RuntimeException(e);
      }
      return result;
最开始的时候 post 并没有去header设置cookie,所以一直报CSRF token validation failed。把 cookie 设置上后就可以了

使用Postman Interceptor插件解决REST客户端的post请求的CSRF

1、Postman Interceptor使用方法: http://www.cnplugins.com/devtool/postman-interceptor/detail.html ...
  • cleverlzc
  • cleverlzc
  • 2017-09-18 20:20:23
  • 763

php curl带有csrf-token验证模拟提交方法

通常为了安全会在表单里加入一个随机的token值来防止csrf攻击。 要想模拟提交有token验证的网站其实也不难。1.获取token 2.带上获取到的token模拟提交下面是一个成功的例子 目...
  • q601115211
  • q601115211
  • 2016-10-18 10:09:05
  • 4496

django种表单post出现CSRF verification failed( CSRF验证失败 ) 的两种解决方案

django种表单post出现CSRF verification failed( CSRF验证失败 ) 的两种解决方案
  • sollor525
  • sollor525
  • 2014-10-30 12:04:09
  • 4489

数据抓取之反爬虫规则:CSRF防御处理及异步请求处理

同事在做数据抓取的时候,发现该提交的参数都提交了,但是返回的数据总是提醒“非法的请求或者超时”;我拿过来检查了半天也没见查出问题,无奈对比了下这个页面和另外一个页面的http头信息,端倪出来了,这页面...
  • mooyinn
  • mooyinn
  • 2015-12-17 11:21:19
  • 3038

Laravel-csrf验证错误

错误:TokenMismatchException in VerifyCsrfToken csrf验证错误 方法一: 打开文件:app\Http\Kernel.php 注释...
  • zmy3376365
  • zmy3376365
  • 2016-11-13 21:56:28
  • 990

django ajax请求 csrf验证失败

如何解决django ajax请求 csrf验证失败的问题: 原文链接:http://stackoverflow.com/questions/5100539/django-csrf-check-fai...
  • qq_24861509
  • qq_24861509
  • 2015-12-02 02:26:38
  • 1977

spring security CSRF 问题 Invalid CSRF Token 'null' was found on ......

1. 问题前面几篇博客 spring security在集成spring boot的微服务框架后,实现了cas认证和权限控制。但是在使用 postman 进行调用的时候出现这个问题HTTP Statu...
  • u012373815
  • u012373815
  • 2017-02-13 13:08:24
  • 12102

Django笔记---用户注册和登录验证(1)--Post请求

**网站建立的第一步,用户的登录验证和新用户注册。 django自带了用户管理(暂时不用),下面自己写一个认证登录:**用户表单提交-POST请求:先建一个html表单页面: post请求地址为当...
  • lw_zhaoritian
  • lw_zhaoritian
  • 2016-07-28 15:28:11
  • 5094

laravel中CSRF的方法

在框架中一般情况下报这种错误的都是csrf防攻击未关闭 那么我们可以关闭这种csrf有以下两种方法: 第一种 打开文件路径:app\Http\Kernel.php 找到这行代码并注释掉: 'A...
  • Ghost_hell
  • Ghost_hell
  • 2016-11-17 09:36:38
  • 4022

yii2中自定义表单或者post请求 csrf验证(防跨站伪请求)

第一种解决办法是关闭Csrfpublic function init(){ $this->enableCsrfValidation = false; }第二种解决办法是在form表单中加入cs...
  • qq_31648761
  • qq_31648761
  • 2016-08-31 15:21:59
  • 2303
收藏助手
不良信息举报
您举报文章:HttpClient 调用远程服务,POST 请求 ,x-csrf-token验证失败,报CSRF token validation failed 问题解决
举报原因:
原因补充:

(最多只允许输入30个字)