Im trying to connect flutter web app with mongodb using restheart api. PUT operation is required for creating new collection in mongoDB. I checked request in Postman, its works fine. I can get data from already existing collection (GET, POST works fine).
Code:
Dio dio = new Dio();
dio.interceptors.add(InterceptorsWrapper(onRequest:
(RequestOptions options) async {
var customHeaders = {
'content-type': 'application/json',
HttpHeaders.authorizationHeader: "Basic $encoded"
};
options.headers.addAll(customHeaders);
return options;
}));
String url = "http://localhost:8080/toofo";
response2 = await dio.put(url);
print("############## ${response2.statusCode} ##########");
print("############## ${response2.data} ##########");
Error:
Error: DioError [DioErrorType.RESPONSE]: XMLHttpRequest error.
at Object.throw_ [as throw] (http://localhost:52789/dart_sdk.js:4773:11)
at dio_for_browser.DioForBrowser.new.<anonymous> (http://localhost:52789/packages/dio/src/entry/dio_for_browser.dart.lib.js:359:27)
at Generator.next (<anonymous>)
at onValue (http://localhost:52789/dart_sdk.js:35655:33)
at _RootZone.runUnary (http://localhost:52789/dart_sdk.js:35540:58)
at _FutureListener.thenAwait.handleValue (http://localhost:52789/dart_sdk.js:30956:29)
at handleValueCallback (http://localhost:52789/dart_sdk.js:31466:49)
at Function._propagateToListeners (http://localhost:52789/dart_sdk.js:31498:17)
at _Future.new.[_completeWithValue] (http://localhost:52789/dart_sdk.js:31357:23)
at async._AsyncCallbackEntry.new.callback (http://localhost:52789/dart_sdk.js:31377:35)
at Object._microtaskLoop (http://localhost:52789/dart_sdk.js:35756:13)
at _startMicrotaskLoop (http://localhost:52789/dart_sdk.js:35762:13)
I also tried http package in flutter, got similar error.
This is the postman's status of PUT request 201Created
XMLHttpRequest error occurs for cross origin. Use this hearder
headers: {
'content-type': 'application/json',
"Access-Control-Allow-Origin": "*", // Required for CORS support to work
"Access-Control-Allow-Credentials": true, // Required for cookies, authorization headers with HTTPS
"Access-Control-Allow-Headers": "Origin,Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,locale",
"Access-Control-Allow-Methods": "POST, OPTIONS"
},
Related
I am developing a web application with flutter. The http requests are made with flutter http plugin. The requests were working fine before. Recently I am getting a CORS Error like this
Access to XMLHttpRequest at 'https://www.google.com/' from origin 'http://localhost:33121' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
I've added corresponding headers with my request. Even that didn't help me to figure it out.
I am sharing the code snippet that I've used for testing.
`var client = http.Client();
try {
var url = 'https://www.google.com/';
var response = await http.get(Uri.parse(url));
print(response.body);
print(response.statusCode);
} finally {
client.close();
}`
These are logs that I am getting from the browser console
Access to XMLHttpRequest at 'https://www.google.com/' from origin 'http://localhost:33189' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
www.google.com/:1 Failed to load resource: net::ERR_FAILED
errors.dart:299 Uncaught (in promise) Error: XMLHttpRequest error.
dart-sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart 963:28 get current
packages/http/src/browser_client.dart 69:22
dart-sdk/lib/async/zone.dart 1653:54 runUnary
dart-sdk/lib/async/future_impl.dart 147:18 handleValue
dart-sdk/lib/async/future_impl.dart 766:44 handleValueCallback
dart-sdk/lib/async/future_impl.dart 795:13 _propagateToListeners
dart-sdk/lib/async/future_impl.dart 557:7 [_complete]
dart-sdk/lib/async/stream_pipe.dart 61:11 _cancelAndValue
dart-sdk/lib/async/stream.dart 1587:7
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 334:14 _checkAndCall
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 339:39 dcall
dart-sdk/lib/html/dart2js/html_dart2js.dart 37341:58
I've tried adding these header information with my request. But this also didn't work.
`var client = http.Client();
try {
var url = 'https://www.google.com/';
var response = await http.get(
Uri.parse(url),
headers: <String, String> {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET,POST,PUT,OPTIONS",
"Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept"
},
);
print(response.body);
print(response.statusCode);`
flutter run -d chrome --web-renderer html
docs https://docs.flutter.dev/development/platform-integration/web/renderers
I'd like to download the JSON file which can be accessed by this url https://firebasestorage.googleapis.com/v0/b/prufungssimulation-caff9.appspot.com/o/5qPfjoZjdNXyN5Ob2q3pFbj5MKy1.json?alt=media. Every time I call the function I get a Error: XMLHttpRequest error. After some researches I found that this might be beacuase Google Firebase Storage is blocking it. Does anybody know how to avoid this block? I've read that I should whiltlist my local host? But how?
headers: {
HttpHeaders.authorizationHeader: 'Basic your_api_token_here', //here i want my token
},
But I have no clue how to get my api Token. Does anybody know how to fetch this token? May this error be caused becaus I run it on chrom flutter?
import 'package:http/http.dart' as http;
void testFunction(){
var url_string = "https://firebasestorage.googleapis.com/v0/b/prufungssimulation-caff9.appspot.com/o/5qPfjoZjdNXyN5Ob2q3pFbj5MKy1.json?alt=media";
var result = await getJsonFromFirebaseRestAPI(url_string);
print(result);
}
Future<String> getJsonFromFirebaseRestAPI(String url) async {
http.Response response = await http.get(Uri.parse(url));
return response.body;
}
The JSON file result should look like this:
routes: []
It's basically empty I'm just trying to implement the function.
I use http: ^0.13.5
I get the following error:
Error: XMLHttpRequest error.
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 299:10
createErrorWithStack
dart-sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart 341:28
_throw
dart-sdk/lib/core/errors.dart 116:5
throwWithStackTrace
dart-sdk/lib/async/zone.dart 1378:11
callback
dart-sdk/lib/async/schedule_microtask.dart 40:11
_microtaskLoop
dart-sdk/lib/async/schedule_microtask.dart 49:5
_startMicrotaskLoop
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 166:15
<fn>
``
Can anybody solve my issue?
Appreciate your time :)
I want to send data with files to AspNetCore api that receive files type IFormFile I tried this
Dio dioFile = Dio(
BaseOptions(
baseUrl: baseUrl,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': 'Bearer ${APIVariables.token}',
},
),
);
dioFile.post(
url,
data: {
"id": complaint.id,
"title": complaint.title,
"files": complaint.files
.map((file) => base64Encode(file.readAsBytesSync()))
.toList(),
};
);
but it shows dio error: DioError [DioErrorType.response]: Http status error [400].
How can I solve that and is there another better method to do that?
And if I want to send files using MultipartFile how can I do that and what api specialist should do to handle my post?
If you want to send the image file then,
It should look like this.
String fileName = imageFile.path.split('/').last;
FormData formData = FormData.fromMap({
"image-param-name": await MultipartFile.fromFile(
imageFile.path,
filename: fileName,
contentType: new MediaType("image", "jpeg"), //important
),
});
If without this line.
contentType: new MediaType("image", "jpeg")
Maybe it will cause an error: DioError [DioErrorType.RESPONSE]: Http status error [400] Exception
You must confirm the correct contentType to work it as expected
And get MediaType in this package: http_parser
final url ="https://example.com/auth/individual/login";
final response = await http.post(
Uri.parse(url),
body: {"email": 'c#gmail.com', 'password': 'C#123'});
print('Response body: ${response.body}');
print(await http.read(Uri.parse('https://example.com/auth/individual/login')));
error:
Response body: {"message":"Cannot read property 'password' of null"}
Error: Request to https://example.com/auth/individual/login failed with status 404: Not Found.
at Object.throw_ [as throw] (http://localhost:50754/dart_sdk.js:5063:11)
at browser_client.BrowserClient.new.[_checkResponseSuccess] (http://localhost:50754/packages/http/src/multipart_request.dart.lib.js:618:17)
at browser_client.BrowserClient.new.read (http://localhost:50754/packages/http/src/multipart_request.dart.lib.js:581:36)
at read.next (<anonymous>)
at http://localhost:50754/dart_sdk.js:40192:33
at _RootZone.runUnary (http://localhost:50754/dart_sdk.js:40062:59)
at _FutureListener.thenAwait.handleValue (http://localhost:50754/dart_sdk.js:34983:29)
at handleValueCallback (http://localhost:50754/dart_sdk.js:35551:49)
at Function._propagateToListeners (http://localhost:50754/dart_sdk.js:35589:17)
at _Future.new.[_completeWithValue] (http://localhost:50754/dart_sdk.js:35437:23)
at async._AsyncCallbackEntry.new.callback (http://localhost:50754/dart_sdk.js:35458:35)
at Object._microtaskLoop (http://localhost:50754/dart_sdk.js:40330:13)
at _startMicrotaskLoop (http://localhost:50754/dart_sdk.js:40336:13)
at http://localhost:50754/dart_sdk.js:35811:9
I changed the api link to example.com this:
https://example.com/auth/individual/login
In your body, try putting password in double quotes rather than single. I don't think many backends will accept keys with single quotes as it is not valid JSON.
I was trying to make a call to a REST service using the Dio plugin, but kept getting HTTP 400 response code. I thought I was doing everything right by setting the content type and response type options to JSON:
Response response = await Dio().get(
'https://api.example.com/v1/products/$productId',
queryParameters: {},
options: Options(
contentType: ContentType.json,
responseType: ResponseType.json,
headers: {'Authorization': 'Bearer $MY_API_KEY'}
),
);
However, it turns out that I needed to add a Content-Type header as well:
headers: {'Authorization': 'Bearer $MY_API_KEY'}, 'Content-Type': 'application/json' };
So now I'm confused - what exactly does the contentType option do? I thought it was analogous to setting the Content-Type header manually?
I've tried this locally using dio: ^3.0.10 and it seems that ContentType.json is an invalid value for contentType.
Digging through the documentation for dio, Headers.jsonContentType should be used.