Python: May 2009 Archives

HDEラボの桜井です。
昨日のプログラムに、ちょっとだけ機能を追加してみましょう。

追加する機能は、プロキシサーバよりさらに先にあるプロキシサーバ(上位プロキシ)を
経由してインターネットにつなげるものです。

 
# -*- coding: utf-8 -*-
from twisted.web import http, proxy
from twisted.internet import reactor, ssl
from twisted.python import log
import sys
import urlparse
 
# とりあえずログを標準出力へ
log.startLogging(sys.stdout)

# 上位プロキシ設定
proxyHost = "192.168.0.1"
proxyPort = 8080

# プロキシリクエストのクラス
class MyProxyRequest(proxy.ProxyRequest):

  # processメソッドを継承
  def process(self):
    parsed = urlparse.urlparse(self.uri)
    protocol = parsed[0]
    host = parsed[1]
    print self.method

    port = self.ports[protocol]
    if ':' in host:
      host, port = host.split(':')
      port = int(port)
    rest = urlparse.urlunparse(('', '') + parsed[2:])
    if not rest:
      rest = rest + '/'
    class_ = self.protocols[protocol]
    headers = self.getAllHeaders().copy()
    if 'host' not in headers:
      headers['host'] = host
    self.content.seek(0, 0)
    s = self.content.read()

    # 上位プロキシの設定がある場合はこちら
    if proxyHost != "" and proxyPort != 0:
      clientFactory = class_(self.method, self.uri, self.clientproto, headers, s, self)
      self.reactor.connectTCP(proxyHost, proxyPort, clientFactory)
    # プロキシが必要ない場合はこちら
    else:
      clientFactory = class_(self.method, rest, self.clientproto, headers, s, self)
      self.reactor.connectTCP(host, port, clientFactory)

# プロキシクラスを継承
class MyProxy(proxy.Proxy):
  requestFactory = MyProxyRequest

# HTTPプロキシサーバのクラス
class MyProxyFactory(http.HTTPFactory):
  protocol = MyProxy
 
# 実行
reactor.listenTCP(8080, MyProxyFactory())
reactor.run


本当はhttpsのプロキシもやりたいんだけどなぁ...。
HDEラボの桜井です。
いろいろと調査の多い昨今の仕事状況ですが、久しぶりにTwistedでも。

試験用にどうしてもHTTPプロキシサーバが必要だったので、なぜかTwistedで自作。
とりあえず機能は単純。
・HTTPプロキシしかできない(CONNECTメソッドはまだできない)
・上位プロキシに転送できない
・ログは標準出力に出す

# -*- coding: utf-8 -*-
from twisted.web import http, proxy
from twisted.internet import reactor, ssl
from twisted.python import log
import sys

# とりあえずログを標準出力へ
log.startLogging(sys.stdout)

# HTTPプロキシサーバのクラス
class MyProxyFactory(http.HTTPFactory):
  protocol = proxy.Proxy

# 実行
reactor.listenTCP(8080, MyProxyFactory())
reactor.run

WEBブラウザのプロキシ設定をして、アクセスすればログが見れます。
CONNECTメソッド対応、上位プロキシ対応ができたらまた公開します。

PyPI に登録する方法

| | Comments (0) | TrackBacks (0)
PyPIとは、Python Package Indexの略で、python版CPANのようなものです。 ここに自作のpythonパッケージを登録することで、easy_installで簡単に パッケージのインストールを行うことができます。

1. PyPIにユーザー登録

下記の2通りあります。いずれかの方法でPyPIにユーザー登録します。

  • PyPIのWebから登録する方法

ここから登録

  • コマンドラインから登録する方法 - PyPIに登録したいプロジェクト(setup.pyを含んだもの)がある場合
    • メニューから2を選択
      [rpmbuild@centos5x86 pysilhouette]$ python setup.py register
      running register
      We need to know who you are, so please choose either:
       1. use your existing login,
       2. register as a new user,
       3. have the server generate a new password for you (and email it to you), or
       4. quit
      Your selection [default 1]:  2
      Username: imtaizo
      Password: 
       Confirm: 
         EMail: taizo.ito@hde.co.jp
      

2. PyPIにコードを登録

[rpmbuild@centos5x86 pysilhouette]$ python setup.py register
running register
We need to know who you are, so please choose either:
 1. use your existing login,
 2. register as a new user,
 3. have the server generate a new password for you (and email it to you), or
 4. quit
Your selection [default 1]:  1
Username: imtaizo
Password: 
Server response (200): OK
I can store your PyPI login so future submissions will be faster.
(the login will be stored in /home/rpmbuild/.pypirc)
Save your login (y/N)?y

3. PyPIのホームページで確認

pypi-pysilhouette.png

4. easy_install によるインストール

[root@rhel5x86-64basic2 ~]# easy_install pysilhouette
Searching for pysilhouette
Reading http://cheeseshop.python.org/pypi/pysilhouette/
Reading http://sourceforge.jp/projects/pysilhouette/
Reading http://cheeseshop.python.org/pypi/pysilhouette/0.6.1
Best match: pysilhouette 0.6.1-beta
Downloading http://keihanna.dl.sourceforge.jp/pysilhouette/39732/pysilhouette-0.6.1-beta.tar.gz
Processing pysilhouette-0.6.1-beta.tar.gz
Running pysilhouette-0.6.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-0ZzV-c/pysilhouette-0.6.1/egg-dist-tmp-mDp7xU
zip_safe flag not set; analyzing archive contents...
Adding pysilhouette 0.6.1 to easy-install.pth file

Installed /usr/lib/python2.4/site-packages/pysilhouette-0.6.1-py2.4.egg
Processing dependencies for pysilhouette

About this Archive

This page is a archive of entries in the Python category from May 2009.

Python: April 2009 is the previous archive.

Python: June 2009 is the next archive.

Find recent content on the main index or look in the archives to find all content.