Я новичок в python и пытаюсь переписать скрипт php, который у меня есть на Python, используя библиотеку запросов. Тем не менее, мне тяжело.Попытка конвертировать скрипт php curl в python с использованием запросов
Сценарий в основном регистрируется на определенном веб-сайте, используя завиток, для которого требуется пользователь/пропуск. 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);
И это мой питон код:
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 для вас, поэтому я предполагаю, что мне не нужно ничего с ними делать, но я но уверен, что у меня такое чувство, что все идет не так.
Вы определяете 'dict' заголовков, но не используете его. Вы также пропустили заголовок User Agent из версии python. Вы можете проверить 'resp.history', чтобы узнать, были ли выпущены какие-либо переадресации. Кроме этого, вы можете проверить журналы в целевом приложении входа, если у вас есть к ним доступ. –
Также вы имели в виду 'if __name__ == '__main__': Login(). Login()'? Класс 'Login' имеет метод' Login', который выполняет фактическую работу. –