Найти тему
NOWADAYS MEDIA

Как задать прокси-сервер в коде программы?

Оглавление

Однажды, во время написания тестов для проекта, столкнулся с проблемой, что при отправке HTTP запроса все время получал ответ, что запрос не был отправлен.

Причина тому была в использовании компанией proxy сервера.

Рассмотрим несколько простых способов, как подключить прокси-сервер в коде.

Подключение прокси-сервера в Python

До внесения изменений, наша программа просто выполняла GET запрос.

>>> import requests
>>> a = requests.get("http://nowadays.name")

Чтобы запрос проходил через прокси, необходимо добавить следующие строчки:

>>> import os
>>> os.environ['http_proxy'] = 'proxy_name:port'

Пример:
>>> import requests
>>> import os
>>> os.environ['http_proxy'] = 'proxy.nowadays.name:8080'
>>> a = requests.get("http://nowadays.name")

Подключение прокси-сервера в C#

Пример кода для получения страницы:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
WebRequest a = WebRequest.Create("http://nowadays.name");

using (WebResponse b = a.GetResponse())
{
using (StreamReader reader = new StreamReader(b.GetResponseStream(), Encoding.UTF8))
{ string content = reader.ReadToEnd(); }
}}}}

И чтобы наш запрос в данном случае шел через прокси-сервер, мы можем глобально подключить прокси:

System.Net.GlobalProxySelection.Select = new WebProxy("proxy_name", port);

либо передать его в классе WebRequest:

WebProxy proxy = new WebProxy("proxy_name", port);
a.Proxy = proxy;

И тогда, код программы будет выглядеть следующим образом:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
WebRequest a = WebRequest.Create("http://nowadays.name");
WebProxy proxy = new WebProxy("proxy.nowadays.name", 8080);
a.Proxy = proxy;

using (WebResponse b = a.GetResponse())
{
using (StreamReader reader = new StreamReader(b.GetResponseStream(), Encoding.UTF8))
{ string content = reader.ReadToEnd(); }
}}}}