日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2023/12/10 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 08-Flutter移动电商实战-dio基础_伪造请求头获取数据 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

08-Flutter移動電商實(shí)戰(zhàn)-dio基礎(chǔ)_偽造請求頭獲取數(shù)據(jù)

在很多時候,后端為了安全都會有一些請求頭的限制,只有請求頭對了,才能正確返回?cái)?shù)據(jù)。這雖然限制了一些人惡意請求數(shù)據(jù),但是對于我們聰明的程序員來說,就是形同虛設(shè)。這篇文章就以極客時間 為例,講一下通過偽造請求頭,來獲取極客時間首頁主要數(shù)據(jù)。(不保證接口和安全措施一直可用哦,趕快練習(xí)吧)

查看極客時間的數(shù)據(jù)端口

如果你是一個前端,這套流程可能已經(jīng)爛熟于心,先找出掘金的一個端口,來進(jìn)行分析。

首先在瀏覽器端打開掘金網(wǎng)站(我用的是chrome瀏覽器::https://time.geekbang.org/,然后按F12打開瀏覽器控制臺,來到NetWork選項(xiàng)卡,再選擇XHR選項(xiàng)卡,這時候刷新頁面就會出現(xiàn)異步請求的數(shù)據(jù)。我們選擇newAll這個接口來進(jìn)行查看。

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

我們就以這個接口為案例,來獲取它的數(shù)據(jù)。

非法請求的實(shí)現(xiàn)

有了接口,我們把上節(jié)課的頁面進(jìn)行一下改造。注意的是,這時候我們并沒有設(shè)置請求頭,為的是演示我們不配置請求頭時,是無法獲取數(shù)據(jù)的,它會返回一個451的錯誤。

451:就是非法請求,你的請求不合法,服務(wù)器決絕了請求,也什么都沒給我們返回。

代碼如下:

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


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

class?_HomePageState?extends?State<HomePage>?{
??String?showText='還沒有請求數(shù)據(jù)';
??@override
??Widget?build(BuildContext?context)?{
????return?Container(
???????child:?Scaffold(
?????????appBar:?AppBar(title:?Text('請求遠(yuǎn)程數(shù)據(jù)'),),
?????????body:?SingleChildScrollView(
???????????child:?Column(
?????????????children:?<Widget>[
???????????????RaisedButton(
?????????????????onPressed:?_jike,
?????????????????child:?Text('請求數(shù)據(jù)'),
???????????????),
???????????????Text(showText)
?????????????],
???????????),
?????????),
???????),
????);
??}

??void?_jike(){
????print('開始向極客時間請求數(shù)據(jù)..................');
????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);
????}
??}

}

這時候我們預(yù)覽,會返現(xiàn)控制臺無情的輸出了異常消息。

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,把請求頭設(shè)置好,請求頭可以在瀏覽器中輕松獲得,獲得后需要進(jìn)行改造。

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'
};

有了請求頭文件后,可以修改主體文件,修改就是引入請求頭文件,并進(jìn)行設(shè)置,主要代碼就這兩句。

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?=?"正在獲取數(shù)據(jù)...";

??@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),
????????),
??????),
????);
??}

}

現(xiàn)在就可以正常獲取數(shù)據(jù)了。效果圖如下所示:

課程總結(jié):

本節(jié)主要學(xué)習(xí)了Dio中如何通過偽造請求頭來獲取別人接口的數(shù)據(jù),學(xué)會了這個是非常有用的,以后我們想自己作練習(xí)Demo時就不用為后端接口而犯愁了。

posted @ 2019-06-15 22:31 niceyoo 閱讀(...) 評論(...) 編輯 收藏 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的08-Flutter移动电商实战-dio基础_伪造请求头获取数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。