ارسال اطلاعات از سمت فلاتر flutter به سمت سرور که با golang نوشته شده باشد

8/18/2022 Go(golang)
431

مشکل ارسال اطلاعات از سمت اپلیکیشنی بود که با فلاتر نوشته میشوند به سمت سروری که با استفاده از زبان golang آماده شده  بود

ارسال اطلاعات از سمت فلاتر به سمت سرور  با استفاده از پروتکلhttp  ارسال می شود مطلبی که مهم بود در سمت golang  ما با استفاده از پکیج echo  اطلاعات را دریافت می کردیم و به سمت متدهای دیگر ارسال می کنیم تا یا بانک اطلاعاتی ذخیره شود و یا یا اعتبار سنجی و روی اطلاعات محاسبات خاصی انجام گیرد،

echo  اطلاعات را به چند صورت دریافت می کند که دو روش از انها برای برای این پروژه کار امد ر بود،  استفاده ازqueryparams و استفاده از formvalue 

در queryparams اطلاعات از طریق url به سمت سرور ارسال میشود و سرور اطلاعات url دریافتی  خوانده و به سمت متدهای بعدی ارجاع داده میشود

مشکلی که من با این روش داشتم این بود که در صورتی که در یک زمان اطلاعات چند فیلد مثلا بیست فیلد به سمت سرور ارسال شود url ما طولانی خواهد بود 

روشی که تاکید داشتم انجام گیرد ارسال اطلاعا ت به صورت model , و دریافت انها با استفاده از formvalue ها بود 

در formvalue ها اطلاعات با استفاده از قسمت body متد http به سمت سرور ارسال شود و اطلاعات سمت سرور در قسمت body در request قابل دیدن و دریافت هستند 

برای ارسال از طریق  formvalue من به دوصورت انجام دادم که هر دو حالت را در اینجا مینویسم 

در هر دو حالت سمت سرور یا این کد بود

unc create(c echo.Context) error {
	var (
		user = models.User{}
	)
	usermobile := c.FormValue("mobile")
	user.Mobile = usermobile
}

حالت اول از سمت فلاتر به عنوان کلاینت 

Future<CompanyName> createCm(String cmName) async {

  String ur = 'http://192.168.1.38:8080/api/v1/user/signin';
  var map = Map<String, dynamic>();
  map['mobile'] = cmName;

  final response = await http.post(
    Uri.parse(ur),

    headers: <String, String>{
      'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
    },
    //body: jsonEncode(<dynamic, String>{'mobile': cmName}),
    body: map,
  );
  if (response.statusCode == 200 || response.statusCode == 201) {
    return CompanyName.fromJson(jsonDecode(response.body));
  } else {
    throw Exception('faild to create .');
  }
}

دو مطلب برای من زمان بر شد

۱- در header

      'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',

استفاده شود و در قسمت body همانطور که میبینید به جای 

body: jsonEncode(<dynamic, String>{'mobile': cmName}),

از 

body: map,

استفاده شود 

در حالت دوم که میتوان با آن فایلها را نیز راسال کرد 


var uri = Uri.parse('http://192.168.1.38:8080/api/v1/user/signin');
var req = http.MultipartRequest('POST', uri)..fields['mobile'] = cmName;

 var response = await req.send();
 final respStr = await response.stream.bytesToString();
 return jsonDecode(respStr);
 if (response.statusCode == 200 || response.statusCode == 201) {
  print('sended');
  }

امیدوارن به کارتان بیاید

رفرنسها

۱.   ۲.   ۳.