2011年2月7日月曜日

BASIC認証のネットワークカメラから画像を取得する

ネットワークカメラ(TS-LCAM,TS-MCAM)から画像を取得するにはBASIC認証をしなければならない。
調べてみるとPythonではHTTPPasswordMgrWithDefaultRealm、HTTPBasicAuthHandlerを使うのが定石らしいが、
画像のURLを開くだけなので、httpリクエストにBASIC認証のヘッダを自己で追加してみた。

# -*- coding: utf-8 -*-
# tslcam.py 2011.2.6

import base64
import re
import urllib2

def get_image(url):
    result = re.match(r"(http://)(?P.*):(?P.*)@(.*)", url)
    if result:
        (user, passwd) = result.group('user', 'passwd')
        url = "".join(result.group(1, 4))
        req = urllib2.Request(url)
        req.add_header("Authorization", "Basic " + base64.encodestring(user+":"+passwd))
        print user,passwd
    else:
        req = urllib2.Request(url)
    print req.get_full_url()
    response = urllib2.urlopen(req, timeout=5)
    image_data = response.read()
    return image_data

if __name__ == "__main__":
    import random
    # TS-LCAM
    url = "http://user1:passwd2@192.168.1.3/m/standard/CamImg%02d.jpg" % random.randint(0,99)
    image_data = get_image(url)
    if image_data:
        with open("tslcam.jpg", 'wb') as f:
            f.write(image_data)

    # TS-MCAM
    url = "http://user3:passwd4@192.168.1.4/m/goform/capture?%d" % random.randint(0,9999)
    image_data = get_image(url)
    if image_data:
        with open("tsmcam.jpg", 'wb') as f:
            f.write(image_data)

0 件のコメント: