我正在post使用Dio创建一个请求,这是我的FormData参数,
FormData formData = FormData.fromMap({
'wallet_id': '${dropdownValue.walletId}',
'member_id': '${_loginModel.memberId}',
'draw_amount': withdrawalAmountContoller.text,
'login_password': passwordController.text,
});
Run Code Online (Sandbox Code Playgroud)
然后我传递params这样的,
Response response = await dio.post(url, data: params);
Run Code Online (Sandbox Code Playgroud)
但我收到请求时出错,
错误[DioError [DioErrorType.RESPONSE]:Http 状态错误[405]] => 路径:https ://vertoindiapay.com/pay/api/withdraw
E/flutter (6703): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] 未处理的异常:DioError [DioErrorType.RESPONSE]: Http 状态错误 [405]
E/flutter(6703):#0 DioMixin._request._errorInterceptorWrapper。(包:dio/src/dio.dart:848:13)
请帮我解决这个问题。我的网址是=> https://vertoindiapay.com/pay/api/withdraw
虽然这在邮递员中工作正常,
我正在使用 Dio 来处理 API 功能。
这是我的代码:
Future<List<ItemModel>> getItems() async {
try {
Response response = await dio.get("$_apiUrl$_itemEndPoint",
options: Options(headers: {
"Accept": 'application/json',
}));
List<ItemModel> _items = List<ItemModel>();
response.data['data']?.forEach((c) {
_items.add(ItemModel.fromMap(c));
});
return _items;
} catch (e) {
throw (e);
}
}
Run Code Online (Sandbox Code Playgroud)
如何根据发送和接收超时捕获错误?
我想知道您是否可以将我指向具有 http badCertificateCallback 的 Web Flutter 库。我试过DIO,但它给了我一个错误并提交了一个问题,但我还没有收到他们的消息
DIO代码:
Dio dio = new Dio(options);
(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
(client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
};
Error: Expected a value of type 'DefaultHttpClientAdapter', but got one of type 'BrowserHttpClientAdapter'
Run Code Online (Sandbox Code Playgroud)
我也试过http,但它没有坏的证书回调,我们可以使用它,但它不兼容网络
HttpClient httpClient = new HttpClient();
httpClient.badCertificateCallback =
((X509Certificate cert, String host, int port) => true);
IOClient ioClient = new IOClient(httpClient);
response = await ioClient.post(url, body: data, headers: headers);
Run Code Online (Sandbox Code Playgroud)
任何评论都会更值得赞赏。
提前致谢,丹尼尔
我正在尝试使用对象向 api 发布请求“
var params = {
"item": "itemx",
"options": [1,2,3],
};
print(params);
try {
Response response = await _dio.post(getAddToCartURL,
queryParameters: params,
options: Options(headers: {
HttpHeaders.contentTypeHeader: "application/json",
}));
} catch (error, stackTrace) {
print("Exception occurred: $error stackTrace: $stackTrace");
return false;
}
Run Code Online (Sandbox Code Playgroud)
Dio 将对象发送为:
POST /api/add-to-cart/?item=itemx&options%5B%5D=1&options%5B%5D=2&options%5B%5D=3
Run Code Online (Sandbox Code Playgroud)
其中 api 将其识别为错误的请求。
我在这里做什么错了?我什至尝试将列表设为 ["1","2","3"],它是一样的。
我正在尝试通过 Flutter Web 将图像上传到 Strapi。我知道(从此链接)我需要使用 FormData 来做到这一点。我研究了很多方法来做到这一点,我偶然发现了Dio,当然还有Http。
两种解决方案都给了我错误:
Unsupported operation: MultipartFile is only supported where dart:io is available.
我试过这个代码:
var request = new http.MultipartRequest("POST", Uri.parse(url));
request.files.add(
await http.MultipartFile.fromPath(
"files",
imageFilePath,
),
);
request.send().then((response) {
if (response.statusCode == 200) print("Uploaded!");
print(response.statusCode);
}).catchError((e) => print(e));
Run Code Online (Sandbox Code Playgroud)
正如这里所建议的。
当我使用MultipartFile.fromBytes(...).
我只是想上传一个文件,因此我认为我的身体应该只包含 FormData ,正如Strapi 的文档中files提到的那样。
我们处于生产应用程序面临以下套接字异常并且在此之后无法执行任何其他网络操作的情况。
DioError [DioErrorType.DEFAULT]: SocketException: Failed host lookup: ‘xyz.abc.com’ (OS Error: nodename nor servname provided, or not known, errno = 8)
Run Code Online (Sandbox Code Playgroud)
注意:反复遇到一位使用 iPhone X、iOS 14.4 的用户
我们使用Dio作为网络客户端,使用Retrofit,它在内部使用来自 dart 的 HttpClient。使用Dio,模拟环境无法重现异常,但直接使用HttpClient,可以在iOS模拟器中使用以下代码重现相同的异常。
HttpClient userAgent = new HttpClient();
bool run = true;
while (run) {
try {
await userAgent.getUrl(Uri.parse('https://www.google.com'));
print('Number of api executed');
} catch (e) {
print(e);
if (e is SocketException) {
if ((e as SocketException).osError.errorCode == 8)
print('***** Exception Caught *****');
}
}
}
Run Code Online (Sandbox Code Playgroud)
一旦抛出异常,HttpClient 就无法从该陈旧状态中恢复,并且所有其他 API 请求都开始失败并出现相同的错误。 …
我有类似的python代码
import requests
headers = {'Host': 'www.google.com','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0','Accept': '*/*','Accept-Language': 'en-US,en;q=0.5','Accept-Encoding': 'gzip, deflate, br','Referer': 'https://www.google.com/','Origin': 'https://www.google.com','Connection': 'keep-alive','Content-Length': '0','TE': 'Trailers'}
response = requests.get("https://www.google.co.in/search?tbs=sbi:AMhZZivWlHh9fYSFQ1SYSgdWdYroq7vlNqRWbgzAeOHgb1_1aVO6EfHf9oo4N6kMf9pR-MjgXMeP5EG4VTTeZ5UujHI12znActXxMoyDqKsqI0cgI9YJ_11xd5R0DiKpo2drjWKnK2lNgGSGJYKdDFJ0ZNKhfBTUn3WKSmG72gLR07uPXdby9jCXC1KJFqBSpaGNrJ6Zc6LSQymwNqqJZrO8iwNYRPzJsoHlWUZNSoZ1X18Ii8X7x0TrlgSz0HySJ_1QO3E8LLbaE0rZluLVBsk6t0GDW2MR4IXs3dCuCcTMPDgqZS-CMks6Tgc6xkDLyLLBC051S6gNxRhXpZ3FVg75Vlt_1nAptI_1Vpw",headers=headers)
print(len(response.text))
Run Code Online (Sandbox Code Playgroud)
和颤振代码,如
import 'package:dio/dio.dart';
Dio dio = Dio();
var headers = {'Host': 'www.google.com','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0','Accept': '*/*','Accept-Language': 'en-US,en;q=0.5','Accept-Encoding': 'gzip, deflate, br','Referer': 'https://www.google.com/','Origin': 'https://www.google.com','Connection': 'keep-alive','Content-Length': '0','TE': 'Trailers'};
var response = await dio.get("https://www.google.co.in/search?tbs=sbi:AMhZZivWlHh9fYSFQ1SYSgdWdYroq7vlNqRWbgzAeOHgb1_1aVO6EfHf9oo4N6kMf9pR-MjgXMeP5EG4VTTeZ5UujHI12znActXxMoyDqKsqI0cgI9YJ_11xd5R0DiKpo2drjWKnK2lNgGSGJYKdDFJ0ZNKhfBTUn3WKSmG72gLR07uPXdby9jCXC1KJFqBSpaGNrJ6Zc6LSQymwNqqJZrO8iwNYRPzJsoHlWUZNSoZ1X18Ii8X7x0TrlgSz0HySJ_1QO3E8LLbaE0rZluLVBsk6t0GDW2MR4IXs3dCuCcTMPDgqZS-CMks6Tgc6xkDLyLLBC051S6gNxRhXpZ3FVg75Vlt_1nAptI_1Vpw",options: Options(headers: headers,followRedirects: true));
var a=response.data;
print(a.length);
Run Code Online (Sandbox Code Playgroud)
问题是我从两个包中得到的结果不同。我想要python的输出,但必须在flutter中实现python代码。任何其他包的颤振解决方案也很好......
我有一个错误;注释必须是 const 变量引用或 const 构造函数调用。dart(invalid_annotation) 名称“Headers”在库“package:dio/src/headers.dart(通过 package:dio/dio.dart)”和“中定义”包:retrofit/http.dart'。尝试对其中一个导入指令使用“作为前缀”,或者对除其中一个导入指令之外的所有导入指令隐藏名称。
我想传递一个 jwt 令牌。但我无法通过标头传递它,因为我收到错误
// import 'dart:convert';
// import 'dart:io';
// import 'package:amc_new/model/client_amc.dart';
// import 'package:http/http.dart' as http;
// import 'package:flutter_config/flutter_config.dart';
// String uri = FlutterConfig.get('API_URL');
// class ClientAmcService {
// // ignore: missing_return
// Future<ClientAmc> getclientAmc(String amcNo) async {
// try {
// var response = await http.get(
// uri + '/report/getamcreport/$amcNo',
// headers: {
// HttpHeaders.authorizationHeader: 'jwt',
// },
// );
// print("------------------------------------------------");
// if (response.statusCode == 200) {
// print(response.body);
// …Run Code Online (Sandbox Code Playgroud) 我想使用 dio 和 build_runner 创建一个 api 服务。但是当我flutter pub run build_runner在终端上运行此命令时出现此错误
[严重] Retrofit_generator:在 lib/web_services/api_services.dart 上进行改造:
类型“ExpandIterable<InterfaceType, MethodElement>”不是“iterable”的“Iterable”类型的子类型
这是我的 api 服务代码。
part 'api_services.g.dart';
@RestApi(baseUrl: Preferences.hrmsAPI)
abstract class RestClient {
factory RestClient(Dio dio) = _RestClient;
@FormUrlEncoded()
@GET('config')
Future<WrappedResponse> config();
@FormUrlEncoded()
@GET('profile')
Future<WrappedResponse> profile(@Header('Authorization') String token);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在对 的 API 调用之一中设置响应类型bytes,但在改造中我没有找到任何设置响应类型的选项。
我使用 dio 作为 http 客户端。
@GET(API.blah_blah)
// I want to set the response Type I want to get, instead of json I need bytes
Future<dynamic> getSomething();
Run Code Online (Sandbox Code Playgroud)
生成的文件中类似这样的内容。
final _result = await _dio.request('some api url',
queryParameters: queryParameters,
options: RequestOptions(
method: 'GET',
// responseType: ResponseType.bytes,// this I have manually added
extra: _extra,
baseUrl: baseUrl),
data: _data);
Run Code Online (Sandbox Code Playgroud) dio ×10
flutter ×10
dart ×4
http ×3
retrofit ×3
build-runner ×1
dart-http ×1
flutter-http ×1
flutter-web ×1
form-data ×1
mobile ×1
python ×1
strapi ×1