В личку скиньте свой TG
Подмена параметра в GET-запросе, отправляемом в браузере
-
В процессе взаимодействия с сайтом в браузере сайт отправляет определенный GET-запрос. Нужно подменить один из параметров в этом GET-запросе через BAS. Нужно именно в браузере, потому что HTTP-клиент (где было бы очень просто сделать замену) не подходит из-за Cloudflare.
Стандартными средствами BAS сделать это не удалось, куплю решение. -
-
@UserTrue said in Подмена параметра в GET-запросе, отправляемом в браузере:
Все верно, тот топик я и создавал) Набор ссылок впечатляющий, но я все равно не знаю, как это сделать. Поэтому новый топик размещен в разделе "Заказать" :)
-
@doupiu said in Подмена параметра в GET-запросе, отправляемом в браузере:
@UserTrue "готовое решение", в таком случае)
Вариантов реализации множество. Близкий лично мне - внешний скрипт, который после старта браузера BAS цепляется к нему и перехватывает запросы/ответы и делает с ним, что хочешь. Это точно работает, если стартовать браузер не из BAS, а с помощью https://github.com/CheshireCaat/puppeteer-with-fingerprints, но на первый взгляд это должно работать если браузер уже кем-то запущен и нужно присоединиться нему по CDP.
Workflow:
- стартуешь браузер из BAS
- получаешь remote-debugging-port
- запускаешь скрипт в фоне с нужным remote-debugging-port, скрипт перехватывает сетевые запросы и манипулирует ими
- работаешь в BAS как обычно с браузером.
Ссылки по теме:
-
-
Еще как вариант альтернативный модуль http использовать.
https://community.bablosoft.com/topic/23332/nativehttpclient-openssl -
Xhr

const open_ = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function() { console.log("Вызов open перехвачен:", arguments); arguments[1] = 'https://httpbin.org/headers' console.log("Вызов open перехвачен:", arguments); open_.apply(this, arguments); } XMLHttpRequest.prototype.open.toString = function(){ return 'function open() { [native code] }' } let xhr = new XMLHttpRequest(); xhr.open('GET','https://httpbin.org/user-agent',false); xhr.send(); JSON.parse(xhr.response)Ftech примерно аналогично
const { fetch: originalFetch } = window; window.fetch = function fetch(...args) { console.log("Вызов fetch перехвачен:", ...args); return originalFetch(...args); };Скорее всего тебе нужно просто после загрузки выполни через блок "яваскрипт"
Если у тебя сразу летит запрос до нажатия кнопки или иного действия, ставь через "при загрузке страницы" -
- На подмену через TamperDev сайт выдает 502 почему-то.
- Альтернативный модуль HTTP не работает (и кажется уже не поддерживается)
- Перехват XHR вроде работает, но, кажется, пришедший ответ от нового GET не воспринимается сайтом (перестает работать взаимодействие с сайтом дальнейшее). Надо покопать..
Как-то так)
-
@Q_Q там такие трюки из-за CORS или CloudFlare не работают (не помню).
В любом случае вам огромное спасибо, потому что я допилил подмену XHR до рабочего состояния на основе вашего примера! Там я просто лишние URL-ы изначально перехватывал, поэтому не работало) Рабочий код у меня в итоге имеет вид:
const open_ = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function(method, url) { if (method === 'GET' && url.includes("tut_maska_url")) { const modifiedUrl = url.replace("abc", "xyz"); arguments[1] = modifiedUrl; } open_.apply(this, arguments); }; XMLHttpRequest.prototype.open.toString = function() { return 'function open() { [native code] }'; };