08-Flutter移动电商实战-dio基础_伪造请求头获取数据

在很多时候,后端为了安全都会有一些请求头的限制,只有请求头对了,才能正确返回数据。这虽然限制了一些人恶意请求数据,但是对于我们聪明的程序员来说,就是形同虚设。这篇文章就以极客时间 为例,讲一下通过伪造请求头,来获取极客时间首页主要数据。(不保证接口和安全措施一直可用哦,赶快练习吧)

查看极客时间的数据端口

如果你是一个前端,这套流程可能已经烂熟于心,先找出掘金的一个端口,来进行分析。

首先在浏览器端打开掘金网站(我用的是chrome浏览器::https://time.geekbang.org/,然后按F12打开浏览器控制台,来到NetWork选项卡,再选择XHR选项卡,这时候刷新页面就会出现异步请求的数据。我们选择newAll这个接口来进行查看。

拷贝地址:https://time.geekbang.org/serv/v1/column/newAll

我们就以这个接口为案例,来获取它的数据。

非法请求的实现

有了接口,我们把上节课的页面进行一下改造。注意的是,这时候我们并没有设置请求头,为的是演示我们不配置请求头时,是无法获取数据的,它会返回一个451的错误。

451:就是非法请求,你的请求不合法,服务器决绝了请求,也什么都没给我们返回。

代码如下:

import 'package:flutter/material.dart';import 'package:dio/dio.dart';

class HomePage extends StatefulWidget {  _HomePageState createState() => _HomePageState();}

class _HomePageState extends State<HomePage> {  String showText='还没有请求数据';  @override  Widget build(BuildContext context) {    return Container(       child: Scaffold(         appBar: AppBar(title: Text('请求远程数据'),),         body: SingleChildScrollView(           child: Column(             children: <Widget>[               RaisedButton(                 onPressed: _jike,                 child: Text('请求数据'),               ),               Text(showText)             ],           ),         ),       ),    );  }

  void _jike(){    print('开始向极客时间请求数据..................');    getHttp().then((val){      setState(() {       showText=val['data'].toString();      });    });  }

  Future getHttp()async{    try{      Response response;      Dio dio = new Dio();       response =await dio.get("https://time.geekbang.org/serv/v1/column/newAll");      print(response);      return response.data;    }catch(e){      return print(e);    }  }

}

这时候我们预览,会返现控制台无情的输出了异常消息。

I/flutter ( 6942): DioError [DioErrorType.RESPONSE]: Http status error [451]E/flutter ( 6942): [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception
伪造请求头

新建一个文件夹,起名叫作config,然后在里边新建一个文件httpHeaders.dart,把请求头设置好,请求头可以在浏览器中轻松获得,获得后需要进行改造。

const httpHeaders={  'Accept': 'application/json, text/plain, */*','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'zh-CN,zh;q=0.9','Connection': 'keep-alive','Content-Type': 'application/json','Cookie': '_ga=GA1.2.676402787.1548321037; GCID=9d149c5-11cb3b3-80ad198-04b551d; _gid=GA1.2.359074521.1550799897; _gat=1; Hm_lvt_022f847c4e3acd44d4a2481d9187f1e6=1550106367,1550115714,1550123110,1550799897; SERVERID=1fa1f330efedec1559b3abbcb6e30f50|1550799909|1550799898; Hm_lpvt_022f847c4e3acd44d4a2481d9187f1e6=1550799907','Host': 'time.geekbang.org','Origin': 'https://time.geekbang.org','Referer': 'https://time.geekbang.org/','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'};

有了请求头文件后,可以修改主体文件,修改就是引入请求头文件,并进行设置,主要代码就这两句。

import '../config/httpHeaders.dart';dio.options.headers= httpHeaders;

全部代码如下:

import 'package:flutter/material.dart';import '../service/service_method.dart';

class HomePage extends StatefulWidget {  @override  _HomePageState createState() => _HomePageState();}

class _HomePageState extends State<HomePage> {

  String homePageContent = "正在获取数据...";

  @override  void initState() {    getHomePageContent().then((val){      setState(() {        homePageContent = val.toString();      });    });    super.initState();  }

  @override  Widget build(BuildContext context) {    return Container(      child: Scaffold(        appBar: new AppBar(title: Text("百姓生活"),),        body: SingleChildScrollView(          child: Text(homePageContent),        ),      ),    );  }

}

现在就可以正常获取数据了。效果图如下所示:

课程总结:

本节主要学习了Dio中如何通过伪造请求头来获取别人接口的数据,学会了这个是非常有用的,以后我们想自己作练习Demo时就不用为后端接口而犯愁了。

posted @ 2019-06-15 22:31 niceyoo 阅读(...) 评论(...) 编辑 收藏

08-Flutter移动电商实战-dio基础_伪造请求头获取数据相关推荐

  1. 05-Flutter移动电商实战-dio基础_引入和简单的Get请求

    05-Flutter移动电商实战-dio基础_引入和简单的Get请求 这篇开始我们学习Dart第三方Http请求库dio,这是国人开源的一个项目,也是国内用的最广泛的Dart Http请求库. 1.d ...

  2. 06-Flutter移动电商实战-dio基础_Get_Post请求和动态组件协作

    06-Flutter移动电商实战-dio基础_Get_Post请求和动态组件协作 上篇文章中,我们只看到了 dio 的使用方式,但并未跟应用关联起来,所以这一篇将 dio 网络请求与应用界面结合起来, ...

  3. Flutter移动电商实战 --(14)首页_拨打电话操作

    拨打电话的功能在app里也很常见,比如一般的外卖app都会有这个才做.其实Flutter本身是没给我们提供拨打电话的能力的,那我们如何来拨打电话那? 1.编写店长电话模块 这个小伙伴们一定轻车熟路了, ...

  4. 66-Flutter移动电商实战-会员中心_编写ListTile的通用方法

    1.界面分析 通过下图我们可以拆分成 4 部分,头部.订单标题区域.订单列表区域.ListTitle同用部分. 2.UI编写 2.1.头部 主要用到了圆形头像裁剪组件-ClipOval 顶部头像区域W ...

  5. SAP 电商云 Spartacus UI 根据 CMS Component uid 获取数据

    uid:LanguageComponent getComponentData 内部会调用 createComponentData: 如果当前不可用,会加载: 最终从 NgRx store 即内存存储中 ...

  6. 01-Flutter移动电商实战-项目学习记录

    01-Flutter移动电商实战-项目学习记录 一直想系统性的学习一下 Flutter,正好看到该课程<Flutter移动电商实战>的百度云资源,共 69 课时,由于怕自己坚持不下去(经常 ...

  7. 08 获取器 withAttr、多连缀、whereRaw、事务、数据集《ThinkPHP6 入门到电商实战》

    知识点:获取器 withAttr.多连缀.whereRaw.事务.数据集 文章目录(更新中-) 01 thinkphp6的前期开发准备<ThinkPHP6 入门到电商实战> 02 控制器& ...

  8. 09-Flutter移动电商实战-移动商城数据请求实战

    09-Flutter移动电商实战-移动商城数据请求实战 1.URL接口管理文件建立 第一步需要在建立一个URL的管理文件,因为课程的接口会一直进行变化,所以单独拿出来会非常方便变化接口.当然工作中的U ...

  9. 04-Flutter移动电商实战-打通底部导航栏

    04-Flutter移动电商实战-打通底部导航栏 关于界面切换以及底栏的实现可参考之前写的一篇文章: Flutter实 ViewPager.bottomNavigationBar界面切换 1.新建4个 ...

最新文章

  1. 驾驶员行为监控系统:需要它来管理车队
  2. LightOJ1245-Harmonic Number (II) 【数学调和级数】
  3. python 去除多个换行
  4. snipaste 使用指南
  5. 表达式x=x(x-1)
  6. 从Windows计算机上完全删除iTunes和其他Apple软件
  7. 不写程序改当老板 留给IT圈一个销魂的背影
  8. python是什么-马哥教育官网-专业Linux培训班,Python培训机构
  9. B/S架构 Web打印程序(Argox)
  10. 数学建模:传染病模型
  11. [RTOS]--uCOS、FreeRTOS、RTThread、RTX等RTOS的对比之特点
  12. 安装黑苹果双系统小记(昂达B365+EFI)
  13. WinCC 中批量绑定变量
  14. GUI优化工具optimtool
  15. Realsense-Ros安装配置
  16. 基于MatlabSimulin的微电网模型及光伏电池建模仿真分析
  17. 博士科研论坛和一些学者研究
  18. 计算机网络中的网络安全
  19. 06-图3. 六度空间 (30)
  20. 互换性与测量技术基础复习题及答案

热门文章

  1. [css] 清除浮动的方式有哪些及优缺点?
  2. 工作244:根据页面的内容调用
  3. 前端学习(2754):配置tabber
  4. 前端学习(1927)vue之电商管理系统电商系统之美化一层循环的UI结构for循环渲染第三层结构
  5. 前端学习(627):数据类型
  6. 项目管理(2):管理过程二
  7. Java面试题18 牛客 假定Base b = new Derived();
  8. mybatis学习(8):The server time zone value '???ú±ê×??±??' is unrecognized or represents more
  9. java:彻底搞懂volatile关键字
  10. 实例6:python