Как настроить и использовать прокси-сервер в скриптах Tampermonkey?

У меня возникли трудности с использованием прокси-сервера. Я пытался направлять запросы через свой сервер на Node.js, пробовал различные подходы, но никакой из них не сработал. Все запросы уходит через обычный IP-адрес. Можете помочь, пожалуйста? 

<pre><code class="javascript">// ==UserScript==
// @name         Proxy Request to 2ip.ru
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Send request to 2ip.ru through proxy
// @author       You
// @match        https://tradeit.gg/*
// @grant        GM_xmlhttpRequest
// @connect      2ip.ru
// ==/UserScript==

(function() {
    'use strict';

    // Define your proxy URL
    const proxyUrl = 'https://login:password@166.1.226.183:8905';

    // Example of making a request via proxy
    GM_xmlhttpRequest({
        method: 'GET',
        url: 'https://2ip.ru/',
        proxy: proxyUrl,
        onload: function(response) {
            console.log('Response from 2ip.ru:', response.responseText);
        },
        onerror: function(error) {
            console.error('Error:', error);
        }
    });
})();</code></pre>
  • 14 января 2025 г. 23:43
Ответы на вопрос 1
Для того чтобы использовать прокси-сервер в скриптах Tampermonkey, стоит помнить несколько важных моментов. В частности, Tampermonkey не поддерживает опцию `proxy` в `GM_xmlhttpRequest`, как вы, возможно, ожидали. Вместо нескольких подходов, законный способ сделать запрос через прокси - это выполнить прокси-запрос на своем сервере, который будет выступать в качестве промежуточного звена, и уже через него делать запросы к нужному ресурсу.

Вот шаги по реализации через ваш Node.js сервер:

1. **Настройка Node.js сервера**: Вам нужно настроить сервер, который будет принимать запросы от Tampermonkey и перенаправлять их через ваш прокси. Ниже пример на Express.js:

```javascript
const express = require('express');
const axios = require('axios');
const app = express();
const port = 3000;

// Middleware для обработки JSON
app.use(express.json());

app.get('/proxy', async (req, res) => {
    const url = req.query.url;
    try {
        // Здесь укажите ваш прокси
        const response = await axios.get(url, {
            proxy: {
                host: '166.1.226.183',
                port: 8905,
                auth: {
                    username: 'login',
                    password: 'password'
                }
            }
        });
        res.send(response.data);
    } catch (error) {
        res.status(500).send('Error fetching the URL: ' + error.message);
    }
});

app.listen(port, () => {
    console.log(`Proxy server running at http://localhost:${port}`);
});
```

2. **Обновление скрипта Tampermonkey**: Теперь, когда ваш сервер настроен, вы можете отправлять запросы к нему и указать URL-адрес, который нужно проксировать.

```javascript
// ==UserScript==
// @name         Proxy Request to 2ip.ru
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Send request to 2ip.ru through proxy
// @author       You
// @match        https://tradeit.gg/*
// @grant        GM_xmlhttpRequest
// @connect      localhost   // добавьте здесь ваш адрес
// @connect      2ip.ru
// ==/UserScript==

(function() {
    'use strict';

    // Запрос к вашему прокси-серверу
    GM_xmlhttpRequest({
        method: 'GET',
        url: 'http://localhost:3000/proxy?url=https://2ip.ru/',
        onload: function(response) {
            console.log('Response from proxy:', response.responseText);
        },
        onerror: function(error) {
            console.error('Error:', error);
        }
    });
})();
```

Таким образом, сам Tampermonkey не делает прямые запросы через прокси, но ваш Node.js сервер может делать это от имени скрипта. Убедитесь, что ваш сервер доступен из сети, если вы планируете использовать его не локально.
Похожие вопросы