8

私の要件は、いくつかの Web サイトhttp://clientdownload.xyz.com/Documents/abc.zipから abc.zip ファイルをダウンロードすることです。

このアクティビティのために、次のように Python スクリプトを作成しました。

    url_to_check = 'http://clientdownload.xyz.com/Documents/abc.zip'
    username = "user"
    password = "pwd"
    p = urllib2.HTTPPasswordMgrWithDefaultRealm()
    p.add_password(None, url_to_check, username, password)
    handler = urllib2.HTTPBasicAuthHandler(p)
    opener = urllib2.build_opener(handler)
    urllib2.install_opener(opener)
    zip_file = urllib2.urlopen(url_to_check).read()       
    file_name = 'somefile.zip'
    meta = zip_file.info()
    file_size = int(meta.getheaders("Content-Length")[0])
    print "Downloading: %s Bytes: %s" % (file_name, file_size)

    with open(file_name, 'wb') as dwn_file:
        dwn_file.write(zip_file.read())

スクリプトを実行すると、次のエラーが発生します。

ファイル「updateCheck.py」、68 行目、check_update zip_file = urllib2.urlopen(url_to_check).read() ファイル「/usr/lib/python2.7/urllib2.py」、126 行目、urlopen return _opener.open( url, data, timeout) File "/usr/lib/python2.7/urllib2.py", line 406, in open response = meth(req, response) File "/usr/lib/python2.7/urllib2.py" 、519 行目、http_response 'http'、request、response、code、msg、hdrs) ファイル "/usr/lib/python2.7/urllib2.py"、444 行目、エラー return self._call_chain(*args) ファイル"/usr/lib/python2.7/urllib2.py"、378 行目、_call_chain 結果 = func(*args) ファイル "/usr/lib/python2.7/urllib2.py"、527 行目、http_error_default で HTTPError を発生させます。 (req.get_full_url()、コード、msg、hdrs、fp) urllib2.HTTPError: HTTP エラー 401:無許可

ユーザー名とパスワードを適切に指定しましたが、不正なエラーがスローされます。

オプション付きのwgetリンクを使用してダウンロードしようとしたところ-http-user and --ask-password、ファイルをダウンロードできました。

また、同じスクリプトを使用して、他のサーバーからファイルを適切にダウンロードできます。

詳細情報を取得するために、このスクリプトを実行しました。

import urllib2, re, time, sys

theurl='http://clientdownload.xxx.com/Documents/Forms/AllItems.aspx'

req = urllib2.Request(theurl)

try:
    handle = urllib2.urlopen(req)

except IOError, e:

    if hasattr(e, 'code'):

        if e.code != 401:
            print 'We got another error'
            print e.code
        else:
            print e.headers
            print e.headers['www-authenticate']

次の情報を入手しました。

Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5
SPRequestGuid: 939bad00-40b7-49b9-bbbc-99d0267a1004
X-SharePointHealthScore: 0
WWW-Authenticate: NTLM
X-Powered-By: ASP.NET
MicrosoftSharePointTeamServices: 14.0.0.6029
Date: Wed, 12 Feb 2014 13:14:19 GMT
Connection: close
Content-Length: 16

NTLM

4

1 に答える 1