Можно ли преобразовать html-ответ в json в flutter?

#flutter

Вопрос:

Я делаю Api call в flutter.

Но ответ приходит в <!DOCTYPE html> формате.

Возможно ли обработать этот тип ответа?

Или возможно преобразовать этот ответ в формат json?

Если да? Пожалуйста, поделитесь своим ответом. Заранее спасибо.

Ниже приведен ответ:

 <div class="otherhead">
<!DOCTYPE html>
<!--[if IE]><![endif]-->
<!--[if IE 8 ]><html dir="ltr" lang="en" class="ie8"><![endif]-->
<!--[if IE 9 ]><html dir="ltr" lang="en" class="ie9"><![endif]-->
<!--[if (gt IE 9)|!(IE)]><!-->
<html dir="ltr" lang="en">
<!--<![endif]-->

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Account Login</title>
    <base href="https://getbest.co.in/" />
    <script src="catalog/view/javascript/jquery/jquery-2.1.1.min.js" type="text/javascript"></script>
    <link href="catalog/view/javascript/bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen" />
    <script src="catalog/view/javascript/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
    <script src="catalog/view/javascript/webiarch/product-slider-zoom/jquery.elevatezoom.js" type="text/javascript">
    </script>
    <link href="catalog/view/javascript/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
    <link href="https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css?family=Montserrat:300,400,500,600,700" rel="stylesheet">
    <link href="catalog/view/theme/default/stylesheet/stylesheet.css" rel="stylesheet">
    <!-- blog image zoom -->
    <script src="catalog/view/javascript/webiarch/blog/lightbox-2.6.min.js" type="text/javascript"></script>
    <link href="catalog/view/javascript/webiarch/blog/lightbox.css" rel="stylesheet" type="text/css" />
    <!-- blog image zoom -->
    <!--right to left (RTL)-->
    <!--over RTL-->
    <script src="catalog/view/javascript/webiarch/custom.js" type="text/javascript"></script>
    <link href="catalog/view/javascript/jquery/magnific/magnific-popup.css" type="text/css" rel="stylesheet"
        media="screen" />
    <link href="catalog/view/theme/default/stylesheet/webinewsletter.css" type="text/css" rel="stylesheet"
        media="screen" />
    <link href="catalog/view/javascript/jquery/webiquickview.css" type="text/css" rel="stylesheet" media="screen" />
    <script src="catalog/view/javascript/jquery/magnific/jquery.magnific-popup.min.js" type="text/javascript">
    </script>
    <script src="catalog/view/javascript/jquery/webiquickview.js" type="text/javascript"></script>
    <script src="catalog/view/javascript/jquery/webinewsletter.js" type="text/javascript"></script>
    <script src="catalog/view/javascript/common.js" type="text/javascript"></script>
    <link href="https://getbest.co.in/image/catalog/cart.png" rel="icon" />
    <link href="https://getbest.co.in/index.php?route=extension/analytics/progressive_web_application/manifest"
        rel="manifest" />
    <script type="text/javascript">
        function isFacebookApp() {var ua = navigator.userAgent || navigator.vendor || window.opera; return (ua.indexOf("FBAN") > -1) || (ua.indexOf("FBAV") > -1);}if (window.location.protocol == "https:" amp;amp; window.isSecureContext) {if(!isFacebookApp()){if ("serviceWorker" in navigator) {if (navigator.serviceWorker.controller) {console.log("[PWA Builder] active service worker found, no need to register");} else {navigator.serviceWorker.register("https://getbest.co.in/index.php?route=extension/analytics/progressive_web_application/service_worker").then(function (reg) {console.log("[PWA Builder] Service worker has been registered for scope: "   reg.scope);});}}} else {console.log("[PWA Builder] The current browser doesn't support service workers.");}} else {console.log("[PWA Builder] The web site is not served from a secure (HTTPS) domain.");}
    </script>
    <meta name="theme-color" content="#000000" />
    <meta name="msapplication-TileColor" content="#000000" />
    <meta name="mobile-web-app-capable" content="yes" />
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="apple-mobile-web-app-status-bar-style" content="#000000" />
    <meta name="apple-mobile-web-app-title"
        content="GETBEST Restaurants range from inexpensive and informal lunching" />
    <meta name="application-name" content="GETBEST" />
    <meta name="msapplication-TileImage" content="https://getbest.co.in/image/cache/catalog/dsfds-144x144.png" />
    <link rel="apple-touch-icon" sizes="57x57" href="https://getbest.co.in/image/cache/catalog/dsfds-57x57.png" />
    <link rel="apple-touch-icon" sizes="76x76" href="https://getbest.co.in/image/cache/catalog/dsfds-76x76.png" />
    <link rel="apple-touch-icon" sizes="114x114"
        href="https://getbest.co.in/image/cache/catalog/dsfds-114x114.png" />
    <link rel="apple-touch-icon" sizes="120x120"
        href="https://getbest.co.in/image/cache/catalog/dsfds-120x120.png" />
    <link rel="apple-touch-icon" sizes="144x144"
        href="https://getbest.co.in/image/cache/catalog/dsfds-144x144.png" />
    <link rel="apple-touch-icon" sizes="152x152"
        href="https://getbest.co.in/image/cache/catalog/dsfds-152x152.png" />
    <link rel="apple-touch-icon" sizes="167x167"
        href="https://getbest.co.in/image/cache/catalog/dsfds-167x167.png" />
    <link rel="apple-touch-icon" sizes="180x180"
        href="https://getbest.co.in/image/cache/catalog/dsfds-180x180.png" />
    <meta name="msapplication-square70x70logo"
        content="https://getbest.co.in/image/cache/catalog/dsfds-70x70.png" />
    <meta name="msapplication-square150x150logo"
        content="https://getbest.co.in/image/cache/catalog/dsfds-150x150.png" />
    <meta name="msapplication-square310x310logo"
        content="https://getbest.co.in/image/cache/catalog/dsfds-310x310.png" />
    <link rel="icon" sizes="128x128" href="https://getbest.co.in/image/cache/catalog/dsfds-128x128.png" />
    <link rel="icon" sizes="192x192" href="https://getbest.co.in/image/cache/catalog/dsfds-192x192.png" />
    <script type="text/javascript" async>
        async function load_jquery_not_exist() {if(!window.jQuery) {var script = document.createElement('script');script.type = "text/javascript";script.async = true;script.src = "https://code.jquery.com/jquery-2.2.4.min.js";document.getElementsByTagName('head')[0].appendChild(script);}}function start_jquery_check() {return load_jquery_not_exist();}(async() => {await start_jquery_check();})();
    </script>
    <link href="https://getbest.co.in/index.php?route=extension/analytics/progressive_web_application/preloader"
        rel="stylesheet" media="screen" />
    <script type="text/javascript" async>
        async function async_preloader() {if(window.jQuery) {$(document).ready(function(){$(window).load(function(){if ($('#pwa-holder')) {$('#pwa-holder').fadeOut(4919, function() {$('body').removeClass('pwa-loading');});}});});}}function start_async_preloader() {return async_preloader();}(async() => {await start_async_preloader();})();
    </script>
</head>
 

Комментарии:

1. пожалуйста, поделитесь своими данными ответа

2. Если ваш HTML на самом деле является XHTML, то есть правильно оформленным XML-документом (и похоже, что это может быть), тогда вы должны относиться к нему как к XML. В этом случае — используйте любые библиотеки xml для json (что-то вроде pub.dev/packages/xml2json ).

3. я работал с xml2Json, он получал недопустимый xml. Есть ли какие-либо идеи, какие-либо способы спасибо за ответ @Andrija

4. Я думаю, что это может быть невозможно преобразовать Html в json . Однако для обработки этого ответа можно использовать Html-пакет Flutter .

5. какие данные вам нужно извлечь?

Ответ №1:

Я выполняю вызов Api в flutter.

Но ответ приходит в формате <!DOCTYPE html> .

Да, их API сломан. Это страница входа в систему. Если вы выполняете вызов API и не прошли проверку подлинности, они должны ответить кодом ошибки 401, а не читаемой человеком HTML-страницей.

Вы можете попытаться попросить их исправить это. Возможно, файл с ошибкой. Но, честно говоря, люди, которые настолько ошибаются в том, как создавать API, вероятно, не сочтут это ошибкой и откажутся что-либо с этим делать.

Примите это как огромный красный флаг в дальнейших отношениях с этим поставщиком API. Если они не могут понять простые вещи правильно … это не очень хороший прогноз, когда есть реальные проблемы, которые нужно решить.

Тем временем… хорошо… вы можете перехватить исключение и предположить, что каждая ошибка, вызванная нарушением протокола, означает, что вы не прошли проверку подлинности должным образом. Это отстой с точки зрения чистого программирования, но, вероятно, это работает.

Чего вам не нужно делать, так это анализировать это. В нем нет информации, которая вам понадобится, за исключением простого факта, что у вас были недействительные учетные данные.

Комментарии:

1. Да, я пытаюсь зарегистрироваться в своем приложении Flutter. В любом случае спасибо за ответ.