Подмена параметра в GET-запросе, отправляемом в браузере

Заказать скрипт
  • @UserTrue said in Подмена параметра в GET-запросе, отправляемом в браузере:

    @doupiu https://community.bablosoft.com/post/150537

    Все верно, тот топик я и создавал) Набор ссылок впечатляющий, но я все равно не знаю, как это сделать. Поэтому новый топик размещен в разделе "Заказать" :)

  • @doupiu а какое вам тогда нужно решение? Чтобы вам просто эту часть скрипта дописали? Просто в моем понимание "куплю решение" это имеется ввиду удочка, а не рыба, но вам видимо нужна рыба )

  • @UserTrue "готовое решение", в таком случае) Я с трудом понимаю, как какой-либо из предложенных вариантов использовать в оболочке BAS..

  • @doupiu said in Подмена параметра в GET-запросе, отправляемом в браузере:

    @UserTrue "готовое решение", в таком случае)

    Вариантов реализации множество. Близкий лично мне - внешний скрипт, который после старта браузера BAS цепляется к нему и перехватывает запросы/ответы и делает с ним, что хочешь. Это точно работает, если стартовать браузер не из BAS, а с помощью https://github.com/CheshireCaat/puppeteer-with-fingerprints, но на первый взгляд это должно работать если браузер уже кем-то запущен и нужно присоединиться нему по CDP.

    Workflow:

    • стартуешь браузер из BAS
    • получаешь remote-debugging-port
    • запускаешь скрипт в фоне с нужным remote-debugging-port, скрипт перехватывает сетевые запросы и манипулирует ими
    • работаешь в BAS как обычно с браузером.

    Ссылки по теме:

  • Ну самое простое скорее всего это использовать расширение темпер, @UserTrue дал выше ссылку. Поставьте в обычном браузере понастраиваете, если работает, то в бас использовать.
    Можно еще фидлер использовать, но это если однопоток так сказать.

  • Еще как вариант альтернативный модуль http использовать.
    https://community.bablosoft.com/topic/23332/nativehttpclient-openssl

  • Xhr
    IMG_20230709_225033_674.jpg IMG_20230709_225034_017.jpg

    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); };
    
    

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

    1. На подмену через TamperDev сайт выдает 502 почему-то.
    2. Альтернативный модуль HTTP не работает (и кажется уже не поддерживается)
    3. Перехват XHR вроде работает, но, кажется, пришедший ответ от нового GET не воспринимается сайтом (перестает работать взаимодействие с сайтом дальнейшее). Надо покопать..

    Как-то так)

  • @doupiu я бы отснифал все что нужно и просто кидал в консольку через fetch или xhr

  • @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] }';
    };
    
  • @doupiu чудесно, что работает. А с корс странно. Если отправлять через консоль находясь на том же домене и тем более урле, должно работать.

  • @Q_Q там API, к которому идет запрос, на поддомене, видимо поэтому)