我是 python 的新手,正在尝试使用请求库重写我在 Python 中的 php 脚本。不过,我很难过。
该脚本基本上使用需要用户/密码的 curl 登录到特定网站。 PHP代码如下:
$username = 'user';
$password = 'pass';
$cookie_file_path = "cookie.txt";
$loginurl = "http://www.example.com/login";
$agent = "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7";
$ch = curl_init();
// extra headers
$headers[] = "Accept: */*";
$headers[] = "Connection: Keep-Alive";
// curl options
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
// set first URL
curl_setopt($ch, CURLOPT_URL, $loginurl);
// start session and get cookies
$content = curl_exec($ch);
//set params
$fields = array();
$fields['p'] = "";
$fields['dest'] = "";
$fields['username'] = $username;
$fields['password'] = $password;
$loginurl = "https://www.example.com/login";
// set postfields
$POSTFIELDS = http_build_query($fields);
// set to login url
curl_setopt($ch, CURLOPT_URL, $loginurl);
// set post options
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $POSTFIELDS);
// perform login
$result = curl_exec($ch);
这是我的 python 代码:
import requests
class Login():
def Login():
username = "user"
password = "pass"
with requests.Session() as s:
cookiePath = "cookie.txt"
loginUrl = "http://www.example.com/login"
headers = {"Accept": "*/*", "Connection": "Keep-Alive"}
resp = s.get(loginUrl)
params = {"p": "", "dest": "", "username": username, "password": password}
loginUrl = "https://www.example.com/login"
resp = s.post(loginUrl, params)
if __name__ == '__main__':
Login()
我不完全确定出了什么问题。调试时我正在打印标题和状态代码,看起来没问题。我在某处读到请求库为您处理 cookie,所以我假设我不需要对它们做任何事情,但我不确定。但是,我感觉事情出了问题。有什么突出的地方吗?
请您参考如下方法:
我不确定这是否是确切的问题,但您似乎没有向请求发送 headers ,也没有在 header 中设置用户代理。尝试这样做 -
headers = {"Accept": "*/*", "Connection": "Keep-Alive", "User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7"}
resp = s.post(loginUrl, params, headers=headers)
