Skip to content

Commit

Permalink
update to 2.0.3 preRelease
Browse files Browse the repository at this point in the history
  • Loading branch information
duwen committed Feb 14, 2019
1 parent 53821ae commit 756ff13
Show file tree
Hide file tree
Showing 24 changed files with 318 additions and 295 deletions.
11 changes: 5 additions & 6 deletions example/cancel_request.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@ main() async {
});

// The follow three requests with the same token.
var url1="https://accounts.google.com";
var url2="https://www.facebook.com";
var url3="https://www.baidu.com";
var url1 = "https://accounts.google.com";
var url2 = "https://www.facebook.com";
var url3 = "https://www.baidu.com";
Response response;
try {
response=await dio.get(url1, cancelToken: token);
response = await dio.get(url1, cancelToken: token);
print(response);
}catch (e){
} catch (e) {
if (CancelToken.isCancel(e)) {
print('$url1: $e');
}
Expand Down Expand Up @@ -54,5 +54,4 @@ main() async {
// print('$url3: $e');
// }
// });

}
1 change: 0 additions & 1 deletion example/cookie_mgr.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import 'dart:io';
import 'package:cookie_jar/cookie_jar.dart';
import 'package:dio/dio.dart';


main() async {
var dio = new Dio();
dio.interceptors
Expand Down
9 changes: 3 additions & 6 deletions example/download.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,7 @@ main() async {
// This is big file(about 200M)
// var url = "http://download.dcloud.net.cn/HBuilder.9.0.2.macosx_64.dmg";

// This is a image, about 4KB
//var url = "https://flutter.io/assets/flutter-lockup-4cb0ee072ab312e59784d9fbf4fb7ad42688a7fdaea1270ccf6bbf4f34b7e03f.svg";
var url =
"https://cdn.jsdelivr.net/gh/flutterchina/[email protected]/docs/imgs/book.jpg";
var url = "https://cdn.jsdelivr.net/gh/flutterchina/[email protected]/docs/imgs/book.jpg";
await download1(dio, url, "./example/book1.jpg");
await download2(dio, url, "./example/book2.jpg");
}
Expand All @@ -25,7 +22,7 @@ Future download1(Dio dio, String url, String savePath) async {
try {
await dio.download(
url,
"./example/book.jpg",
savePath,
onReceiveProgress: showDownloadProgress,
);
} catch (e) {
Expand All @@ -35,7 +32,7 @@ Future download1(Dio dio, String url, String savePath) async {

Future download2(Dio dio, String url, String savePath) async {
try {
Response response = await dio.get<List<int>>(
Response response = await dio.get(
url,
onReceiveProgress: showDownloadProgress,
//Received data with List<int>
Expand Down
26 changes: 13 additions & 13 deletions example/formdata.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,35 +5,35 @@ import 'package:dio/dio.dart';
/// FormData will create readable "multipart/form-data" streams.
/// It can be used to submit forms and file uploads to http server.
main() async {
var dio = new Dio();
var dio = Dio();
//dio.options.baseUrl = "http://www.dtworkroom.com/doris/1/2.0.0/";
FormData formData = new FormData.from({
FormData formData = FormData.from({
"name": "wendux",
"age": 25,
"file": new UploadFileInfo(new File("./example/upload.txt"), "upload.txt"),
"file2": new UploadFileInfo.fromBytes(utf8.encode("hello world"), "word.txt"),
"file": UploadFileInfo(File("./example/upload.txt"), "upload.txt"),
"file2": UploadFileInfo.fromBytes(utf8.encode("hello world"), "word.txt"),
// In PHP the key must endwith "[]", ("files[]")
//"files[]": [
// new UploadFileInfo(new File("./example/upload.txt"), "upload.txt"),
// UploadFileInfo( File("./example/upload.txt"), "upload.txt"),
// ]
"files": [
new UploadFileInfo(new File("./example/upload.txt"), "upload.txt"),
new UploadFileInfo(new File("./example/upload.txt"), "upload.txt")
UploadFileInfo(File("./example/upload.txt"), "upload.txt"),
UploadFileInfo(File("./example/upload.txt"), "upload.txt")
]
});

FormData formData2 = new FormData.from({
FormData formData2 = FormData.from({
"name": "wendux",
"age": 25,
//"file": new UploadFileInfo(new File("/Users/duwen/Downloads/YoudaoNote.dmg"), "YoudaoNote.dmg"),
"file":new UploadFileInfo(new File("./example/upload.txt"), "upload.txt"),
"file2": new UploadFileInfo.fromBytes(utf8.encode("hello world"), "word.txt"),
//"file": UploadFileInfo( File("/Users/duwen/Downloads/YoudaoNote.dmg"), "YoudaoNote.dmg"),
"file": UploadFileInfo(File("./example/upload.txt"), "upload.txt"),
"file2": UploadFileInfo.fromBytes(utf8.encode("hello world"), "word.txt"),
});

//Response response = await dio.post("/token", data: formData);
Response response = await dio.post("http://localhost:3000/upload", data: formData2, cancelToken: CancelToken());
Response response = await dio.post("http://localhost:3000/upload",
data: formData2, cancelToken: CancelToken());
print(response.statusCode);
//Response response = await dio.post("http://localhost/ds/test", data: formData);
print(response.data);
}

94 changes: 46 additions & 48 deletions example/interceptor_lock.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,59 +9,57 @@ main() async {
String csrfToken;
dio.options.baseUrl = "http://www.dtworkroom.com/doris/1/2.0.0/";
tokenDio.options = dio.options;
dio.interceptors.add(InterceptorsWrapper(
onRequest: (RequestOptions options) {
print('send request:path:${options.path},baseURL:${options.baseUrl}');
if (csrfToken == null) {
print("no token,request token firstly...");
//lock the dio.
dio.lock();
return tokenDio.get("/token").then((d) {
options.headers["csrfToken"] = csrfToken = d.data['data']['token'];
print("request token succeed, value: " + d.data['data']['token']);
print('continue to perform request:path:${options.path},baseURL:${options.path}');
return options;
}).whenComplete(() => dio.unlock()); // unlock the dio
} else {
options.headers["csrfToken"] = csrfToken;
dio.interceptors.add(InterceptorsWrapper(onRequest: (RequestOptions options) {
print('send request:path:${options.path},baseURL:${options.baseUrl}');
if (csrfToken == null) {
print("no token,request token firstly...");
//lock the dio.
dio.lock();
return tokenDio.get("/token").then((d) {
options.headers["csrfToken"] = csrfToken = d.data['data']['token'];
print("request token succeed, value: " + d.data['data']['token']);
print(
'continue to perform request:path:${options.path},baseURL:${options.path}');
return options;
}).whenComplete(() => dio.unlock()); // unlock the dio
} else {
options.headers["csrfToken"] = csrfToken;
return options;
}
}, onError: (DioError error) {
// Assume 401 stands for token expired
if (error.response?.statusCode == 401) {
RequestOptions options = error.response.request;
// If the token has been updated, repeat directly.
if (csrfToken != options.headers["csrfToken"]) {
options.headers["csrfToken"] = csrfToken;
//repeat
return dio.request(options.path, options: options);
}
},
onError: (DioError error) {
// Assume 401 stands for token expired
if(error.response?.statusCode==401){
RequestOptions options=error.response.request;
// If the token has been updated, repeat directly.
if(csrfToken!=options.headers["csrfToken"]){
options.headers["csrfToken"]=csrfToken;
//repeat
return dio.request(options.path,options: options);
}
// update token and repeat
// Lock to block the incoming request until the token updated
dio.lock();
dio.interceptors.responseLock.lock();
dio.interceptors.errorLock.lock();
return tokenDio.get("/token").then((d) {
//update csrfToken
options.headers["csrfToken"] = csrfToken = d.data['data']['token'];
}).whenComplete((){
dio.unlock();
dio.interceptors.responseLock.unlock();
dio.interceptors.errorLock.unlock();
}).then((e){
//repeat
return dio.request(options.path,options: options);
});
}
return error;
// update token and repeat
// Lock to block the incoming request until the token updated
dio.lock();
dio.interceptors.responseLock.lock();
dio.interceptors.errorLock.lock();
return tokenDio.get("/token").then((d) {
//update csrfToken
options.headers["csrfToken"] = csrfToken = d.data['data']['token'];
}).whenComplete(() {
dio.unlock();
dio.interceptors.responseLock.unlock();
dio.interceptors.errorLock.unlock();
}).then((e) {
//repeat
return dio.request(options.path, options: options);
});
}
));

return error;
}));

_onResult(d){
_onResult(d) {
print("request ok!");
}
}

await Future.wait([
dio.get("/test?tag=1").then(_onResult),
dio.get("/test?tag=2").then(_onResult),
Expand Down
19 changes: 7 additions & 12 deletions example/options.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,34 +7,29 @@ main() async {
connectTimeout: 5000,
receiveTimeout: 100000,
// 5s
headers: {
"user-agent": "dio",
"api": "1.0.0"
},
headers: {"user-agent": "dio", "api": "1.0.0"},
contentType: ContentType.JSON,
// Transform the response data to a String encoded with UTF8.
// The default value is [ResponseType.JSON].
responseType: ResponseType.plain
));
responseType: ResponseType.plain));

Response<String> response;

response = await dio.get("/test");
print(response.data);

Response<Map> responseMap = await dio.get("/test",
Response<Map> responseMap = await dio.get(
"/test",
// Transform response data to Json Map
options: new Options(responseType: ResponseType.json),
);
print(responseMap.data);

response = await dio.post("/test",
response = await dio.post(
"/test",
data: {
"id": 8,
"info": {
"name": "wendux",
"age": 25
}
"info": {"name": "wendux", "age": 25}
},
// Send data with "application/x-www-form-urlencoded" format
options: new Options(
Expand Down
8 changes: 5 additions & 3 deletions example/proxy.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,16 @@ main() async {
//dio.options.connectTimeout = 2000;
// More about HttpClient proxy topic please refer to Dart SDK doc.
dio.interceptors.add(CookieManager(PersistCookieJar()));
(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (HttpClient client) {
(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.findProxy = (uri) {
//proxy all request to localhost:8888
return "PROXY localhost:8888";
};
client.badCertificateCallback=(X509Certificate cert, String host, int port)=>true;
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
};
var dir=new Directory("./cookies");
var dir = new Directory("./cookies");
await dir.create();
Response<String> response;
//response= await dio.get("https://github.com/wendux/fly");
Expand Down
41 changes: 19 additions & 22 deletions example/request_interceptors.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,28 @@ import 'package:dio/dio.dart';
main() async {
Dio dio = new Dio();
dio.options.baseUrl = "http://www.dtworkroom.com/doris/1/2.0.0/";
dio.interceptors.add(InterceptorsWrapper(
onRequest: (RequestOptions options){
switch (options.path) {
case "/fakepath1":
return dio.resolve("fake data");
case "/fakepath2":
return dio.get("/test");
case "/fakepath3":
dio.interceptors.add(InterceptorsWrapper(onRequest: (RequestOptions options) {
switch (options.path) {
case "/fakepath1":
return dio.resolve("fake data");
case "/fakepath2":
return dio.get("/test");
case "/fakepath3":
// You can also return a HttpError directly.
return dio.reject("test error");
case "fakepath4":
return dio.reject("test error");
case "fakepath4":
// Here is equivalent to call dio.reject("test error")
return new DioError(
message: "test error");
case "/test?tag=1":
{
//Response response = await dio.get("/token");
//options.headers["token"] = response.data["data"]["token"];
return options;
}
default:
return options; //continue
}
return new DioError(message: "test error");
case "/test?tag=1":
{
//Response response = await dio.get("/token");
//options.headers["token"] = response.data["data"]["token"];
return options;
}
default:
return options; //continue
}
));
}));
Response response = await dio.get("/fakepath1");
assert(response.data == "fake data");
response = await dio.get("/fakepath2");
Expand Down
35 changes: 16 additions & 19 deletions example/response_interceptor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,24 @@ main() async {
const String URL_NOT_FIND_3 = URL_NOT_FIND + "3";
Dio dio = new Dio();
dio.options.baseUrl = "http://www.dtworkroom.com/doris/1/2.0.0/";
dio.interceptors.add(InterceptorsWrapper(
onResponse: (Response response) {
return response.data["data"]; //
},
onError: (DioError e) async {
if (e.response != null) {
switch (e.response.request.path) {
case URL_NOT_FIND:
return e;
case URL_NOT_FIND_1:
return dio.resolve(
"fake data"); // you can also return a HttpError directly.
case URL_NOT_FIND_2:
return new Response(data: "fake data");
case URL_NOT_FIND_3:
return 'custom error info [${e.response.statusCode}]';
}
dio.interceptors.add(InterceptorsWrapper(onResponse: (Response response) {
return response.data["data"]; //
}, onError: (DioError e) async {
if (e.response != null) {
switch (e.response.request.path) {
case URL_NOT_FIND:
return e;
case URL_NOT_FIND_1:
return dio.resolve(
"fake data"); // you can also return a HttpError directly.
case URL_NOT_FIND_2:
return new Response(data: "fake data");
case URL_NOT_FIND_3:
return 'custom error info [${e.response.statusCode}]';
}
return e;
}
));
return e;
}));

Response response;
response = await dio.get("/test");
Expand Down
2 changes: 1 addition & 1 deletion example/test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ main() async {
queryParameters: {"kk": "tt"},
options: Options(
headers: {HttpHeaders.acceptEncodingHeader: "*"},
responseType: ResponseType.bytes
responseType: ResponseType.bytes,
),
onReceiveProgress: (received, total) {
if (total != -1) {
Expand Down
Loading

0 comments on commit 756ff13

Please sign in to comment.