Найти - Пользователи
Полная версия: Обмен данными через прокси
Начало » Python для новичков » Обмен данными через прокси
1 2
EgorTrepov
Народ, выручайте. Нужно сделать клиент и сервер на python 2.7, которые будут связываться через прокси сервер. Принцип: клиент послал серверу Hello World, сервер отзеркалил, клиент поймал, вывел в консоль. И тд и тп. И все это через прокси
Budulianin
EgorTrepov
Нужно сделать клиент и сервер на python 2.7

Полно примеров работы с socket. Например в документации.
Более подробно и на русском у Лутца.

Что непонятно?
EgorTrepov
Можно пример? Разбираться время поджимает.
Budulianin
EgorTrepov
Можно пример?
Пример
EgorTrepov
Это напрямую. А тоже самое, но через прокси? Да, да, я тупой( Просто время поджимает
Budulianin
EgorTrepov
А тоже самое, но через прокси?
“Сервер” слушает порт на каком-то хосте.
“Прокси-сервер” знает его хост и порт.
“Клиент” знает хост и порт “прокси-сервера”.

Request:
Клиент -> Прокси -> Сервер

Response:
Клиент <- Прокси <- Сервер

Пример
EgorTrepov
Голова моя деревянная… Вы можете мне в коде этом натыкать носом, где там сервер, где прокси, где клиент?
Budulianin
Сделаем прокси с basic authentication на nginx.

Берём nginx, в стандартный конфиг добавляем:
(нужно посетить доку nginx)
server {
    listen 8254;
    location / {
        auth_basic           "closed site";
        auth_basic_user_file /home/vagrant/htpasswd;
        proxy_pass http://precise64:3812;
    }
}

В файлике htpasswd:
zubizu:Km4hLNggQPzAE

Запустили nginx.

Пишем сервер, его мы спрячем за nginx.

import socket
HOST = socket.gethostname()
PORT = 3812
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((HOST, PORT))
server.listen(1)
while True:
    conn, addr = server.accept()
    data = conn.recv(1024)
    if not data: break
    conn.sendall('HTTP/1.1 200 OK\n\nHello!')
    print(data)
    conn.close()

Запускаем сервер.

Пишем клиент.

import socket
HOST = socket.gethostname()
PORT = 8254
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((HOST, PORT))
client.sendall('GET / HTTP/1.1\nHost: precise64\nAuthorization:Basic enViaXp1OnB5dGhvbg==\n\n')
data = client.recv(1024)
client.close()
print 'Received', repr(data)

Уберём один символ из заголовка Authorization(eViaXp1OnB5dGhvbg==, хэш неверный => нас не пустят)
Запустим клиент и увидим:

Received 'HTTP/1.1 401 Unauthorized\r\nServer: nginx/1.4.5\r\nDate: Fri, 12 Sep 2014 19:30:44 GMT\r\nContent-Type: text/html\r\nContent-Length: 194\r\nConnection: keep-alive\r\nWWW-Authenticate: Basic realm="closed site"\r\n\r\n<html>\r\n<head><title>401 Authorization Required</title></head>\r\n<body bgcolor="white">\r\n<center><h1>401 Authorization Required</h1></center>\r\n<hr><center>nginx/1.4.5</center>\r\n</body>\r\n</html>\r\n'

Вернём символ на место.
Запустим клиент.

nginx нас пропустил и сервер отдал ответ:
Received 'HTTP/1.1 200 OK\r\nServer: nginx/1.4.5\r\nDate: Fri, 12 Sep 2014 19:32:45 GMT\r\nTransfer-Encoding: chunked\r\nConnection: keep-alive\r\n\r\n6\r\nHello!\r\n0\r\n\r\n'
EgorTrepov
nginx это, я так понимаю, собственно прокси сервер? а с другим данный код будет работать?
Budulianin
EgorTrepov
nginx это, я так понимаю, собственно прокси сервер?
Ну я же написал
Budulianin
Сделаем прокси с basic authentication на nginx.

Прочитай, что такое nginx.

EgorTrepov
с другим данный код будет работать?
С каким другим?

Прочитай вообще, что такое прокси-сервера.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB