#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. В любом случае спасибо за ответ.