Ошибка Dio: код ошибки состояния HTTP [405] Flutter

Я получаю код ошибки состояния HTTP 405 при отправке почтовых запросов с реальных устройств, но он работает внутри почтальона.

URL-адрес:https://amapp.adtestbed.com/api/post-survey

Ниже приведены данные формы, которые я использую

FormData formData = FormData.fromMap({
      
        'user_id': id,
        'is_collection':
            jobDetailsResponseModel.jobData.jobStatus == '8' ? 1 : 0,
        'job_id': jobDetailsResponseModel.jobData.id,
        'job_no': bookingIdController.text.toString(),
        'sender_name': senderNameController.text.toString(),
        'reciever_name': recieverNameController.text.toString(),
        'sender_phone': senderPhoneController.text.toString(),
        'reciever_phone': recieverPhoneController.text.toString(),
        'sender_address': senderAddressController.text.toString(),
        'reciever_address': recieverAddressController.text.toString(),
        'sender_signature_data':
            "data:image/jpeg;base64," + base64Imagesendersign,
        'receiver_signature_data':
            "data:image/jpeg;base64," + base64Imagerecieversign,
        'location': currentLocation,
      
      'images[]': uploadimages,
      'maked[]': makedlist,
      'model[]': modallist,
      'rego[]': regolist,
      'speedo[]': speedolist,
      'is_drivable[]': isdrivablelist,
      'goods_inside[]': goodsinsidelist,
      'external_condition[]': externalconditionlist,
      'interior_condition[]': internalconditionlist,
      'survey_image[]': surveyimagelist,
      'comments[]': commentlist
    }); 

Здесь поле изображений представляет собой список, состоящий из нескольких частей. И делать запросы следующим образом

final response = await Dio().request(
        'https://amapp.adtestbed.com/api/post-survey',
        data: formData,
        options: Options(
          headers: {
            "Accept": "application/json",
          },
          method: 'POST',
        ),
      );

также использовал следующий код для проверки, но все еще не работает

final response = await Dio().post(
        'https://amapp.adtestbed.com/api/post-survey',
        data: formData,
        options: Options(
          // headers: {
          //   // "Accept": "application/json",
          //   // 'Content-Type': 'application/x-www-form-urlencoded'
          // },
          method: 'POST',
        ),
      );

Когда я отправляю форму без поля изображений, она отлично отправляется и дает статус 200, но когда я отправляю ее с полем изображений, которое содержит список составных форм, тогда он возвращает код состояния 405. В конце выдается ошибка, например, метод get не поддерживается, поддерживается только метод post. Я также проверил внутренний код, но с этой стороны ошибок нет, потому что он выдает ошибку перед отправкой запроса. Я также проверил, были ли какие-то нулевые данные, которые создавали ошибки, но ни одно поле не было нулевым.

Но когда я делаю оба случая в почтальоне, он работает нормально.

Это ссылка почтальона:

https://drive.google.com/file/d/1hTmDC2aQ7vTMxSnzwaeRqd9gv7UbPWhR/view?usp=sharing

Это некоторые изображения почтальона

enter image description here

enter image description here

enter image description here

enter image description here

вы должны передавать данные таким образом для данных формы вместе с почтовым запросом: stackoverflow.com/questions/57846215/…

Hardik Mehta 17.05.2022 10:13
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
1
38
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

https://stackoverflow.com/a/64235806/11623001

Проверьте это. У меня тоже была похожая проблема раньше, и я также заметил, что вы не добавляете свой authorization token к своему header, что может объяснить, почему вы получаете 405, что означает, что у вас нет доступа.

Я пытался воссоздать вашу проблему со своей стороны, но срок действия токена авторизации истек, я получаю 401, но вот код:

    void postSome() async {
        String base64 = 
      
//This base64 is shortened     "data:image/png;base64,...+WZm/et53efvWO6Tuc6rH7kUXy1lxs+/61t7dMg6VAvURAAAAQHMQogDAbE6dlLXtft/F3cuvkJNbetbn7VWrpUUX+mvEtqdHvgAAAABoOf8P3x1uDPELl4UAAAAASUVORK5CYII=";
        FormData formData = FormData.fromMap({
          'user_id': 139,
          'is_collection': "1" == '8' ? 1 : 0,
          'job_id': "248",
          'job_no': "60036JL#1",
          'sender_name': "test",
          'reciever_name': "test",
          'sender_phone': "1234567890",
          'reciever_phone': "1234567890",
          'sender_address': "test",
          'reciever_address': "test",
          'sender_signature_data':
             base64,
          'receiver_signature_data': base64,
          'location': "32, Gopal Nagar, Om Nagar, Gopal Nagar Society, Parvat Patiya, Surat, Gujarat 395010, India\n",
          'images[]': "/D:/App/Logicwind/GitLAb/whiteboard-digitization/test_images/w11.jpg",
          'maked[]': "test",
          'model[]': "test",
          'rego[]': "test",
          'speedo[]': "123",
          'is_drivable[]': "1",
          'goods_inside[]': "1",
          'external_condition[]': "3",
          'interior_condition[]': "3",
          'survey_image[]': base64,
          'comments[]': "test"
        });
    
        final response = await Dio().request(
          'https://amapp.adtestbed.com/api/post-survey',
          data: formData,
          options: Options(
            headers: {
              'Accept': "application/json",
              'Authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiIzIiwianRpIjoiNTlkNzNlZjE4YzcxNGJjMWM1ZjE0ZGQxOWE1OWZmNmQ1YjVhNDViNDIwNzlkODY4ZmJkOGRmNjJlOGM4MDQzNmVjYmIxZjc4MjM5MmZiOGIiLCJpYXQiOjE2MjgxNzY5NTAsIm5iZiI6MTYyODE3Njk1MCwiZXhwIjoxNjU5NzEyOTUwLCJzdWIiOiI0NiIsInNjb3BlcyI6W119.lfnzUvq_LwYtBUQ-t6S_mKXEoM6er6ZzCuTUoHnqz9wwrdLOcu6x9CEixqMRvI-RWtSoiMO5KCYZsgagayGW5slYk6zAAa0V5fCjkRipqqus6mXe6nowtcXs_2V9ucjVoH4Evkb9lFBlE1rlpxKgcGXTcx4UgQs8kjJ5Wm4A8omedza_hUQPN9KUAfhhBDeL9hq-DkC7QbLu_YxnG5g-AETKhbJu8T4HWKqkh9NKGbNlvs1oi_nD81F1w8uSteY-UOgDJyUoGJxzoD6xmEv3J4mkrdr1ZbG88EzTyk3zngwBp9eWcLHhMS2psxArOnOnWusweJJ5uZiWiu2VIL7fWmV5b6G4OCvvkba5eXmw8iAvACACuCGQtOcGdN_euUgyfM9z9a8QbK8M2I-ux4GGY0ejCamFEJZCTwyBCxmLIrP4XjQoeL71WT1YBOgSZwDjA6qrAfL_fLwbEYQYbLIF8fLUmDOWRKBIaJLSVNG2x0Gl5LLXTiTZAzRRtJlSxZ4-Vid4hQJX39lohp-47XPAxvHnNTxiLw_aAG3SruFZ_rtdX4xnNbV3hSI825CD5dBeQC5iE-hiLXDWDXelM_q2fSD1rez62XQZGp1KfvlwowxAWgIghTfSH_E52h6mdoHEo9q73UJNYDz_F9Sj8EOfY3VWtmN6HMmcs4HZht36qX4',
            },
            method: 'POST',
          ),
        );
        print(response.statusCode);
      }

Требуется ли авторизация для почтового запроса, потому что в моем запросе не требуется токен авторизации, который я также отказался от почтальона?

MORE AKASH 17.05.2022 11:17

В вашем почтовом запросе был один чек. Если в вашем запросе POST его нет, то в этом нет необходимости, но если он есть, то это абсолютно необходимо. Проверьте вкладку заголовков в почтальоне, и вы увидите, что на самом деле используете заголовок.

Denzel 17.05.2022 11:25

Та авторизация в почтальоне была старым токеном API. Но у моего API нет никакой авторизации, работает без нее.

MORE AKASH 17.05.2022 11:28

Хорошо, позвольте мне просмотреть

Denzel 17.05.2022 11:37

Нет, спасибо, я просматриваю старый API, у него есть токен авторизации, и после передачи нового токена проблема решена. Спасибо еще раз.

MORE AKASH 17.05.2022 11:52

Похоже, два поля ниже — это файлы, а не данные формы.

'sender_signature_data': "data:image/jpeg;base64," + base64Imagesendersign
'receiver_signature_data': "data:image/jpeg;base64," + base64Imagerecieversign

Вы должны добавить их как поля файла, подобные этому


"sender_signature_data": await MultipartFile.fromFile(sender_signature_path,
      filename: fileName, contentType: MediaType(mimee, type))
  }),
"receiver_signature_data":await MultipartFile.fromFile(reciever_signature_path,
      filename: fileName, contentType: MediaType(mimee, type))
  })

Требуется ли авторизация для почтового запроса, потому что в моем запросе не требуется токен авторизации, который я также отказался от почтальона?

MORE AKASH 17.05.2022 11:18

Большинство серверов отказываются отвечать, если не отправлен заголовок авторизации. Это своего рода сообщение серверу, кто вызывает запрос. Я просмотрел вашу коллекцию почтальонов, у нее есть заголовок авторизации. скопируйте заголовок авторизации от почтальона во вкладке авторизации.

prasanth 17.05.2022 11:20

Эта авторизация в почтальоне была старым токеном API. Но мой API не имеет авторизации, он работает без него.

MORE AKASH 17.05.2022 11:26

Нет, спасибо, я просматриваю старый API, у него есть токен авторизации, и после передачи нового токена проблема решена. Спасибо еще раз.

MORE AKASH 17.05.2022 11:53

Эй, проблема, похоже, в файлах. вы прикрепляете подписи как поля формы. где как таковой должен быть файл. Используйте multipart в dio, чтобы решить эту проблему. Обновленное решение. Проверьте

prasanth 17.05.2022 12:02

Другие вопросы по теме