2017-07-11 7 views
3

私は、次のコードを使用してPythonでurllibを使用してWebサイトにログインしようとしています:ログインurllibは使用して代わりのhttp.client

import urllib.parse 
import urllib.request 
headers = {"Content-type": "application/x-www-form-urlencoded"} 
payload = urllib.parse.urlencode({"username": "USERNAME-HERE", 
            "password": "PASSWORD-HERE", 
            "redirect": "index.php", 
            "sid": "", 
            "login": "Login"}).encode("utf-8") 
request = urllib.request.Request("https://osu.ppy.sh/forum/ucp.php?mode=login", payload, headers) 
response = urllib.request.urlopen(request) 
data = response.read() 

# print the HTML after the request 
print(bytes(str(data), "utf-8").decode("unicode_escape")) 

私は一般的な提案は、単に要求ライブラリを使用することであることを知っています私はこれを試しましたが、特にRequestsを使わないでこれを行う方法を知りたいと思っています。

私が探しています動作が正常にhttp.clientを使用してサイトにログインし、次のコードで複製することができます。

import urllib.parse 
import http.client 
headers = {"Content-type": "application/x-www-form-urlencoded"} 
payload = urllib.parse.urlencode({"username": "USERNAME-HERE", 
            "password": "PASSWORD-HERE", 
            "redirect": "index.php", 
            "sid": "", 
            "login": "Login"}) 
conn = http.client.HTTPSConnection("osu.ppy.sh") 
conn.request("POST", "/forum/ucp.php?mode=login", payload, headers) 
response = conn.getresponse() 
data = response.read() 

# print the HTML after the request 
print(bytes(str(data), "utf-8").decode("unicode_escape")) 

urllibコードはペイロードを「提供」されていないように私には思えます、コードはhttp.clientです。

正しいパスワードとユーザー名がサーバーからの応答を保証しているので、ペイロードを「配信」できるようですが、正しいユーザー名とパスワードを指定しても効果はないようです。

洞察?私は何か見落としていますか?

+0

私は実行するためにあなたのコードを試してみましたが、私は(あなたが間違ったパスワードを指定している...)期待される結果を得ます。ペイロードが配信されたことを意味します。あなたが正しいユーザ名/パスワードを入力した場合、あなたはどのような反応を得ますか? – Qeek

+1

@Qeek正しいユーザー名とパスワードが与えられても、私がログインしていない(「Welcome、!」の代わりに「ようこそ!ゲスト!初期ペイロード配信後にログインが維持されない可能性がありますか?クッキーを使用する必要がありますか? –

答えて

2

クッキージャーを追加し、それらがurllibで必要とされていないとして、ヘッダーを取る:

import http.cookiejar 
import urllib.parse 
import urllib.request 

jar = http.cookiejar.CookieJar() 
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(jar)) 

payload = urllib.parse.urlencode({"username": "USERNAME-HERE", 
            "password": "PASSWORD-HERE", 
            "redirect": "index.php", 
            "sid": "", 
            "login": "Login"}).encode("utf-8") 
response = opener.open("https://osu.ppy.sh/forum/ucp.php?mode=login", payload) 
data = response.read() 

# print the HTML after the request 
print(bytes(str(data), "utf-8").decode("unicode_escape")) 
関連する問題