Skip to main content
 首页 » 编程设计

python之尝试使用请求将 php curl 脚本转换为 python

2024年10月24日26qq78292959

我是 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)