1

URLlib2(およびpython 2.7)を使用して、Webサイトからコンテンツを取得しています。これまで、URLlib2 OKを使用してコンテンツをOKにしてきましたが、コンテンツレベルのパスワードを持つWebサイトにアクセスするのはこれが初めてです。私は正当なu:pを持っています(私は明らかにここで共有することはできません)、そして私は私の要求に何らかの形で正しいクレデンシャルを与えていないようです。

ここでは、Python urllib2、基本HTTP認証、およびtr.im(username, password)を文字列としてのクレデンシャル( "myUsername"、 "myPassword")に置き換える方法を使用しました。

print result.read()空白行を取得すると、次のprint result.headers()ようになります。

<addinfourl at 40895752L whose fp = <socket._fileobject object at 0x00000000026757C8>>

例として、呼び出しの予想されるすべてのインスタンスについて、これはある種のファイルオブジェクトがあることを意味すると思います...

print result.info()ヘッダーが戻ってくるかどうかを確認しようとしましたが、一連のヘッダーが表示されます。

REDACTED
Date: Mon, 01 Oct 2012 10:06:24 GMT
Server: Apache/2.2.3 (Red Hat)
X-Powered-By: PHP/5.1.6
Set-Cookie: OJSSID=mc7u47e674jmpjgk3kspfgc9l3; path=/
Refresh: 0; url=http:REDACTED loginMessage=reader.subscriptionRequiredLoginText
Content-Length: 0
Connection: close
Content-Type: text/html; charset=UTF-8

したがって、「loginMessage = reader.subscriptionRequiredLoginText」から、資格情報を適切に送信していないことを確認できます。

ポインタはありますか?

呼び出しコードは次のとおりです。

def getArticle(newLink):
request = urllib2.Request(newLink)
base64string = base64.encodestring('%s:%s' % ("myUsername", "myPassword")).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)   
result = urllib2.urlopen(request)
print result.read()

URLの例は次のとおりです。編集済み-私のウェブサイトではありません!

4

2 に答える 2

2

リクエストライブラリの処理は、よりもはるかに優れていurllib2ます。

提供したリンクを見ると、基本認証は必要ありません。むしろ、フォームです...したがって、フォームの「action」属性のURLを取得し、それにデータを送信する必要があります。リクエストの使用例:

import requests
url = 'http://www.content.alternative.ac.nz/index.php/alternative/login/signIn'
r = requests.post(url, data={'username': 'username', 'password': 'password', 'remember': '1'})

これは完全には確認できませんが(有効なu&pがないため)、[Remember Me]ボタンを効果的にチェックして送信することで、Cookieにアクセスできるようになります。これにより、次r.cookiesのようなリクエストに使用できるようになります。なので:

cookies = r.cookies
r = requests.get('http://www.content.alternative.ac.nz/index.php/alternative/article/view/176/202', cookies=cookies)
于 2012-10-01T10:09:30.353 に答える
1

urllib2の代わりにRequestsforHumansを使用することをお勧めします。それは使用がはるかに簡単で、より明白です。

サイトが基本HTTP承認をサポートしていない場合があります。これは、各リクエストのヘッダーでクレデンシャルを送信することを前提としています。代わりに、ログインページに資格情報を含むPOSTが必要です。このPOSTはサーバーで検証され、資格情報が正しい場合、サーバーはブラウザにCookieの保存を要求する「Set-Cookie:name=value」という応答を返します。次に、このCookieは、認証されたクライアントを識別するために使用されます。

どうやら、それはあなたの場合です。この例では、 http://www.content.alternative.ac.nz/index.php/alternative/login/signInにPOSTリクエストを送信し、所有している資格情報を使用してパラメーター「login」と「password」を設定する必要があります。次に、応答からCookieを取得し、このように次のリクエストに追加します。

于 2012-10-01T10:06:19.433 に答える