rare-cheesecakeの日記

主に技術情報を不定期更新していきます。今注目しているのはPythonとDevOpsです。

あけましておめでとうございます。

2013年が始まりました。今年は良い年でありますように(ぇ。

 

さて、昨年から取りかかっているCloudFoundryですが、色々と問題があってプロキシ認証環境ではうまく構築ができていません。

また、CloudFoundryだけでなく、関連するライブラリが通信を行う際にも必ずプロキシ認証で止まってしまうため、そのライブラリがプロキシ認証に対応していないとエラーとなってしまいます。

そこで、一度プロキシ認証を通した後にそのまま接続を使えないかと考えたところ、

シングルサインオン形式のサーバーを立てて、それを介してインターネットへアクセスする方法を試してみることにしました。

まずはPythonを使ってプロキシ認証を行うサーバーを立ててみました。

 

 

import SocketServer
import base64
import socket
import urllib2
 
class MyTCPHandler(SocketServer.BaseRequestHandler):
 
    def handle(self):
        proxy = urllib2.ProxyHandler({'http': 'http://プロキシユーザーID:プロキシパスワード@プロキシサーバー名:ポート番号'})
        auth = urllib2.HTTPBasicAuthHandler()
        opener = urllib2.build_opener(proxy, auth, urllib2.HTTPHandler)
        urllib2.install_opener(opener)
 
        conn = urllib2.urlopen('http://サンプルとして開くページのURL')
        return_str = conn.read()
 
        self.data = self.request.recv(1024).strip()
        print "%s wrote:" % self.client_address[0]
        print self.data
        self.request.send(self.data.upper())
        
 
if __name__ == "__main__":
    HOST, PORT = "localhost", 9999
 
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
    server.serve_forever()
 
 

このサーバーを起動してブラウザで「http://localhost:9999」へアクセスすると、プロキシ認証を行ってから特定のページ(コード中のurllib2.urlopen)へアクセスします。

また、「return_str = conn.read()」移行のコードはデータを読み込んでその内容を表示するサンプルコードです。

次はCloudFoundry構築時にこのサーバーへアクセスさせる方法を考えてみます。