Запрос REST через сценарий автоматической настройки
От: Passerby  
Дата: 13.06.24 16:54
Оценка:
В настройках прокси есть пункт "Использовать сценарий автоматической настройки". В частности популярна запись в этом поле https://antizapret.prostovpn.org:8443/proxy.pac. А можно ли делать запросы REST?, если используется такая настройка?
Re: Запрос REST через сценарий автоматической настройки
От: Passerby  
Дата: 14.06.24 13:04
Оценка:
Здравствуйте, Passerby, Вы писали:

P>В настройках прокси есть пункт "Использовать сценарий автоматической настройки". В частности популярна запись в этом поле https://antizapret.prostovpn.org:8443/proxy.pac. А можно ли делать запросы REST?, если используется такая настройка? Или, может, можно получить прокси из этого pac файла?
Re[2]: Запрос REST через сценарий автоматической настройки
От: rFLY  
Дата: 15.06.24 05:31
Оценка: 1 (1)
Здравствуйте, Passerby, Вы писали:

P>>Или, может, можно получить прокси из этого pac файла?

Ты про это?

The solution presented in the article uses the WinHttp.dll for obtaining a proxy URL.

Re[3]: Запрос REST через сценарий автоматической настройки
От: Passerby  
Дата: 15.06.24 12:30
Оценка:
Здравствуйте, rFLY, Вы писали:

FLY>Здравствуйте, Passerby, Вы писали:


P>>>Или, может, можно получить прокси из этого pac файла?

FLY>Ты про это?
FLY>

FLY>The solution presented in the article uses the WinHttp.dll for obtaining a proxy URL.

Близко, нон как использовать в программе на C# для REST не ясно.
Re[4]: Запрос REST через сценарий автоматической настройки
От: m2user  
Дата: 15.06.24 14:03
Оценка:
P>Близко, нон как использовать в программе на C# для REST не ясно.

А причем тут программа на C#?
PAC сценарий пишется на JavaScript (см. https://developer.mozilla.org/en-US/docs/Web/HTTP/Proxy_servers_and_tunneling/Proxy_Auto-Configuration_PAC_file).
Ты же из кода сценария хочешь делать REST запросы?
Отредактировано 15.06.2024 14:04 m2user . Предыдущая версия .
Re[5]: Запрос REST через сценарий автоматической настройки
От: rFLY  
Дата: 15.06.24 17:15
Оценка:
Здравствуйте, m2user, Вы писали:

M>Ты же из кода сценария хочешь делать REST запросы?

А в PAC ни fetch, ни XMLHttpRequest недоступны. Разве нет?
Re[6]: Запрос REST через сценарий автоматической настройки
От: m2user  
Дата: 15.06.24 17:43
Оценка:
FLY>А в PAC ни fetch, ни XMLHttpRequest недоступны. Разве нет?

Не знаю Мне самому интересно, список функций, приведенный по ссылке ниже, исчерпывающий или нет
https://developer.mozilla.org/en-US/docs/Web/HTTP/Proxy_servers_and_tunneling/Proxy_Auto-Configuration_PAC_file#predefined_functions_and_environment
Re[7]: Запрос REST через сценарий автоматической настройки
От: rFLY  
Дата: 15.06.24 18:12
Оценка: 3 (1)
Здравствуйте, m2user, Вы писали:

M>Не знаю Мне самому интересно, список функций, приведенный по ссылке ниже, исчерпывающий или нет

Попробовал в фаерфоксе 115.3 — PAC перестает работать как будто не подключен. Предположу что падает на первой строке функции:
function FindProxyForURL(url, host) {
    var xhr = new XMLHttpRequest();
    return "PROXY localhost:80";
}

Для проверки, что PAC подключается, закомментировал первую строку и получил "The proxy server is refusing connections".
Re[5]: Запрос REST через сценарий автоматической настройки
От: Passerby  
Дата: 17.06.24 16:54
Оценка:
Здравствуйте, m2user, Вы писали:

P>>Близко, нон как использовать в программе на C# для REST не ясно.


M>А причем тут программа на C#?

M>PAC сценарий пишется на JavaScript (см. https://developer.mozilla.org/en-US/docs/Web/HTTP/Proxy_servers_and_tunneling/Proxy_Auto-Configuration_PAC_file).
M>Ты же из кода сценария хочешь делать REST запросы?

Нет. Я хочу из программы на C# делать REST запросы, через https://antizapret.prostovpn.org:8443/proxy.pac Можно, конечно, самому собрать массив бесплатных прокси и менять их в цикле, пока не попадется работающий, но, имхо, в этом PAC собраны лучшие бесплатные, работающие на хорошей скорости.
Re[6]: Запрос REST через сценарий автоматической настройки
От: m2user  
Дата: 17.06.24 17:21
Оценка:
P>Нет. Я хочу из программы на C# делать REST запросы, через https://antizapret.prostovpn.org:8443/proxy.pac Можно, конечно, самому собрать массив бесплатных прокси и менять их в цикле, пока не попадется работающий, но, имхо, в этом PAC собраны лучшие бесплатные, работающие на хорошей скорости.

Чем не устраивает решение через WinHttp.dll, которое давали в комментариях ранее?
Формат списка проксей возвращаемых этим API описан тут:
https://learn.microsoft.com/en-us/windows/win32/api/winhttp/ns-winhttp-winhttp_proxy_info#remarks

Если же речь именно о https://antizapret.prostovpn.org:8443/proxy.pac, то судя по коду там всего три прокси
HTTPS f.thenewone.lol:3145
HTTPS s.thenewone.lol:3145
PROXY n.thenewone.lol:29976

А все остальное это логика по определению заблокированных URL.
Ну и учитывай warning в коде про последние две прокси:
    // WARNING! WARNING! WARNING!
    // You should NOT use these proxy servers outside of PAC file!
    // DO NOT enter it manually in any program!
    // By doing this, you harm the service!
Re[7]: Запрос REST через сценарий автоматической настройки
От: Passerby  
Дата: 18.06.24 08:27
Оценка:
Здравствуйте, m2user, Вы писали:
M>Чем не устраивает решение через WinHttp.dll, которое давали в комментариях ранее?
написал сразу после ссылки.
M>Если же речь именно о https://antizapret.prostovpn.org:8443/proxy.pac, то судя по коду там всего три прокси
M>HTTPS f.thenewone.lol:3145
M>HTTPS s.thenewone.lol:3145
M>PROXY n.thenewone.lol:29976
f.thenewone.lol:3145 напрямую ни с инстаграммом, ни с фейсбуком не работает. Но URL автоматической настройки прокси с ними работает. Похоже, прокси определяет откуда пришел запрос: с файла pac или напрямую. Третий с rutracker.org работает, с другими не пробовал.

M>Ну и учитывай warning в коде про последние две прокси:

M>
M>    // WARNING! WARNING! WARNING!
M>    // You should NOT use these proxy servers outside of PAC file!
M>    // DO NOT enter it manually in any program!
M>    // By doing this, you harm the service!
M>

Вероятно, связано с тем, что твиттер, инстаграм, фейсбук и еще некоторые сайты подключают строго через f.thenewone.lol:3145 (хотя у меня не получилось).
Отредактировано 18.06.2024 8:37 Passerby . Предыдущая версия . Еще …
Отредактировано 18.06.2024 8:35 Passerby . Предыдущая версия .
Re[8]: Запрос REST через сценарий автоматической настройки
От: m2user  
Дата: 18.06.24 10:47
Оценка:
P>написал сразу после ссылки.

Да, я видел, но в чём именно затруднение не из твоего комментария не ясно..

На самом деле тут есть проблема: две из трех проксей, которые возвращает обсуждаемый PAC сценарий, это HTTPS прокси.
А поддержка HTTPS прокси появилась только в .NET 8 (если не считать неоф. поддержки в .net core 2.1).
См. https://github.com/dotnet/core/issues/8437#issuecomment-1624217579
https://github.com/dotnet/runtime/issues/31113

Так что, если у тебя .NET более ранней версии, то ты сможешь использовать только HTTP проксю (PROXY n.thenewone.lol:29976).

P>f.thenewone.lol:3145 напрямую ни с инстаграммом, ни с фейсбуком не работает. Но URL автоматической настройки прокси с ними работает. Похоже, прокси определяет откуда пришел запрос: с файла pac или напрямую. Третий с rutracker.org работает, с другими не пробовал.


Нет, прокся такого узнать не может, а вот запросы она может обслуживать не все.
PAC сценарий возвращает разные прокси для разных url, и, как видно из кода PAC для инстаграмма и FB возвращается как раз f.thenewone.lol:3145.
Дело скорее всего в способе, каким ты тестируешь проксю.
Если через веб-браузер, то учитывай, что mozilla firefox HTTPS проксю поддерживает только через PAC сценарий.
Рабочий пример настройки я приводил тут https://rsdn.org/forum/life/8727230.1
Автор: m2user
Дата: 08.04.24

    network.proxy.autoconfigurl = data:text/plain,function FindProxyForURL(u,h){return "HTTPS host:port";}

Для Google Chrome с HTTPS проксей работает SwitchyOmega extension например.

Последняя прокся из списка (PROXY n.thenewone.lol:29976) это обычная HTTP прокся, поэтому веб-браузер умеет работать с ней через обычные настройки, но twitter, FB и инстаграмм это сервер не обслуживает.
pac
Re[9]: Запрос REST через сценарий автоматической настройки
От: Passerby  
Дата: 18.06.24 15:34
Оценка:
Здравствуйте, m2user, Вы писали:
M>Да, я видел, но в чём именно затруднение не из твоего комментария не ясно..

"Чтобы запустить приложение, вам необходимо поместить файл proxy.pac в домашний каталог веб-сайта по умолчанию. Обычно это каталог c:\inetpub\wwwroot ."
У меня не веб-сайт, а обычный домашний ПК. Итак, создаю новый проект, пишу HttpClient client=new(); Какой код дальше и куда помещать pac?

M>На самом деле тут есть проблема: две из трех проксей, которые возвращает обсуждаемый PAC сценарий, это HTTPS прокси.

M>А поддержка HTTPS прокси появилась только в .NET 8 (если не считать неоф. поддержки в .net core 2.1).
M>См. https://github.com/dotnet/core/issues/8437#issuecomment-1624217579
M>https://github.com/dotnet/runtime/issues/31113

M>Так что, если у тебя .NET более ранней версии, то ты сможешь использовать только HTTP проксю (PROXY n.thenewone.lol:29976).

У меня NET 8.

M>Дело скорее всего в способе, каким ты тестируешь проксю.

M>Если через веб-браузер, то учитывай, что mozilla firefox HTTPS проксю поддерживает только через PAC сценарий.
У меня платный Https прокси. Firefox без проблем поддерживает. Галочка в http снята и поля, соответствующие http, пустые.
Re[10]: Запрос REST через сценарий автоматической настройки
От: Sinclair Россия https://github.com/evilguest/
Дата: 18.06.24 16:24
Оценка: 3 (1)
Здравствуйте, Passerby, Вы писали:
P>У меня не веб-сайт, а обычный домашний ПК. Итак, создаю новый проект, пишу HttpClient client=new(); Какой код дальше и куда помещать pac?
Туда, куда вы сможете построить URL.
Например, можете брать прямо с https://antizapret.prostovpn.org:8443/proxy.pac
P>У меня NET 8.
    class ProxyTest
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            Stream RequestStream  = null;
            string DestinationUrl = "http://www.google.com";
            string PacUri         = "http://127.0.0.1/proxy.pac1"; // вот здесь указываете URL к вашему PAC-файлу
            
            
            // Create test request 
            WebRequest TestRequest = WebRequest.Create ( DestinationUrl );
            
            // Optain Proxy address for the URL 
            string ProxyAddresForUrl = Proxy.GetProxyForUrlUsingPac ( DestinationUrl, PacUri );
            if ( ProxyAddresForUrl != null ){
                Console.WriteLine ("Found Proxy: {0}", ProxyAddresForUrl );
                TestRequest.Proxy = new WebProxy ( ProxyAddresForUrl ) ;  // вот как автор предлагает устанавливать проксю для данного запроса
            }else{                
                Console.WriteLine ( "Proxy Not Found. Send request directly."  );
            }
            
            try {
                WebResponse TestResponse = TestRequest.GetResponse();
                Console.WriteLine ( "Request was successful" );
            }catch ( Exception ex ){
                Console.WriteLine ( "Error: {0}", ex.Message );
            }finally{
                if ( RequestStream != null ){
                    RequestStream.Close();
                }
            }
            Console.ReadLine();
        }
    }
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[11]: Запрос REST через сценарий автоматической настройки
От: Passerby  
Дата: 18.06.24 19:24
Оценка:
Здравствуйте, Sinclair, Вы писали:
S> string ProxyAddresForUrl = Proxy.GetProxyForUrlUsingPac ( DestinationUrl, PacUri );
В каком nuget определен класс Proxy? В winhttp.dll его нет. Или у меня VS глючит: добавил эту библиотеку, но Proxy нет.
Re[12]: Запрос REST через сценарий автоматической настройки
От: rFLY  
Дата: 18.06.24 20:43
Оценка:
Здравствуйте, Passerby, Вы писали:

P>В каком nuget определен класс Proxy? В winhttp.dll его нет. Или у меня VS глючит: добавил эту библиотеку, но Proxy нет.

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

The main function that returns the proxy for a specific URL is GetProxyForUrlUsingPac that is defined in the Proxy class:

Отредактировано 18.06.2024 20:46 rFLY . Предыдущая версия .
Re[12]: Запрос REST через сценарий автоматической настройки
От: Sinclair Россия https://github.com/evilguest/
Дата: 19.06.24 04:49
Оценка:
Здравствуйте, Passerby, Вы писали:

P>Здравствуйте, Sinclair, Вы писали:

S>> string ProxyAddresForUrl = Proxy.GetProxyForUrlUsingPac ( DestinationUrl, PacUri );
P>В каком nuget определен класс Proxy?
Ни в каком. Вы код скачали?
Там лежит файл
  Proxy.cs:
using System;

namespace PacProxyUsage
{
    /// <summary>
    /// Summary description for Proxy.
    /// </summary>
    public class Proxy
    {
        public Proxy()
        {
        }

        /// <summary>
        /// Return proxy for requested Url
        /// </summary>
        /// <param name="sUrl">url</param>
        /// <param name="sPacUri">Uri to PAC file</param>
        /// <returns>proxy info</returns>
        public static string GetProxyForUrlUsingPac ( string DestinationUrl, string PacUri ){

            IntPtr WinHttpSession = Win32Api.WinHttpOpen("User", Win32Api.WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, IntPtr.Zero, IntPtr.Zero, 0);

            Win32Api.WINHTTP_AUTOPROXY_OPTIONS  ProxyOptions   = new Win32Api.WINHTTP_AUTOPROXY_OPTIONS();
            Win32Api.WINHTTP_PROXY_INFO         ProxyInfo      = new Win32Api.WINHTTP_PROXY_INFO(); 
            
            ProxyOptions.dwFlags           = Win32Api.WINHTTP_AUTOPROXY_CONFIG_URL;
            ProxyOptions.dwAutoDetectFlags = (Win32Api.WINHTTP_AUTO_DETECT_TYPE_DHCP | Win32Api.WINHTTP_AUTO_DETECT_TYPE_DNS_A);
            ProxyOptions.lpszAutoConfigUrl = PacUri;
            
            // Get Proxy 
            bool IsSuccess = Win32Api.WinHttpGetProxyForUrl( WinHttpSession, DestinationUrl, ref ProxyOptions, ref ProxyInfo );
            
            Win32Api.WinHttpCloseHandle(WinHttpSession);

            if ( IsSuccess ){
                return ProxyInfo.lpszProxy;
            }else {
                Console.WriteLine("Error: {0}", Win32Api.GetLastError() );
                return null;
            }
        }
       
    }
}

(Предвосхищая следующий вопрос: класс Win32API описан в соседнем файле)
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.