Ваш API возвращает ответ html как часть защиты бота. Ответ на самом деле представляет собой код, который должен быть запущен на вашем клиенте, прежде чем сервер разрешит ему доступ к API.
Это HTML-код, который он возвращает (специально не отформатированный):
<html><body><script type="text/javascript" src="/aes.js" ></script><script>function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f<d.length;f++)e+=(16>d[f]?"0":"")+d[f].toString(16);return e.toLowerCase()}var a=toNumbers("..................."),b=toNumbers(".................."),c=toNumbers("...........");document.cookie="__test="+toHex(slowAES.decrypt(c,2,a,b))+"; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/"; location.href="http://crunchbox.epizy.com/wp-json/wp/v2/posts?i=1";</script><noscript>This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support</noscript></body></html>
Важной частью является javascript в середине:
function toNumbers(d) {
var e = [];
d.replace(/(..)/g, function(d) {
e.push(parseInt(d, 16))
});
return e
}
function toHex() {
for (var d = [], d = 1 == arguments.length && arguments[0].constructor == Array ? arguments[0] : arguments, e = "", f = 0; f < d.length; f++) e += (16 > d[f] ? "0" : "") + d[f].toString(16);
return e.toLowerCase()
}
var a = toNumbers("..............."),
b = toNumbers("..............."),
c = toNumbers("...............");
document.cookie = "__test=" + toHex(slowAES.decrypt(c, 2, a, b)) + "; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/";
location.href = "http://crunchbox.epizy.com/wp-json/wp/v2/posts?i=1"; < /script>
Обратите внимание, что я заменил три двоичные последовательности в toNumber("abcd1234") with
.... `.
Если у вас есть доступ к серверу NGINX (я полагаю), который обслуживает сайт WordPress, вы можете отключить это. Или вы можете использовать аутентификацию WordPress и добавить дополнительный метод аутентификации с помощью плагина - см. Нижнюю часть документации WordPress для аутентификации API .
Третий вариант - вы можете «запустить» код js и установить cookie в свой запрос, используя заголовок. Очевидно, что флаттер не может запустить JS изначально. Но теоретически вы могли бы сделать это с помощью веб-просмотров на android и ios, или вы могли бы проанализировать код, чтобы найти «a», «b» и «c», и выполнить расшифровку cbc AES-128 с использованием некоторой библиотеки ( это может работать, но без обещаний).