我正在尝试使用以下代码使用Python中的http.client登录网站:
void DoubleString(char** str, size_t* cap)
我知道一个常见的建议就是使用Requests库,我尝试过这个,但我特别想知道如何在不使用请求的情况下执行此操作。
我正在寻找的行为可以使用以下代码复制,这些代码使用请求成功登录到站点:
import urllib.parse
import http.client
payload = urllib.parse.urlencode({"username": "USERNAME-HERE",
"password": "PASSWORD-HERE",
"redirect": "index.php",
"sid": "",
"login": "Login"})
conn = http.client.HTTPConnection("osu.ppy.sh:80")
conn.request("POST", "/forum/ucp.php?mode=login", payload)
response = conn.getresponse()
data = response.read()
# print the HTML after the request
print(bytes(str(data), "utf-8").decode("unicode_escape"))
在我看来,http.client代码不是“传递”有效载荷,而请求代码是。
任何见解?我忽略了什么吗?
编辑:添加import requests
payload = {"username": "USERNAME-HERE",
"password": "PASSWORD-HERE",
"redirect": "index.php",
"sid": "",
"login": "Login"}
p = requests.Session().post('https://osu.ppy.sh/forum/ucp.php?mode=login', payload)
# print the HTML after the request
print(p.text)
会提供以下输出:
conn.set_debuglevel(1)
答案 0 :(得分:3)
由于您正在编写有效负载,因此必须发送标头:application/x-www-form-urlencoded