Аутентификация с помощью запросов Python — Cookies? Полезная нагрузка? Что-то другое?

Я пытаюсь войти на этот сайт, используя python (и после автоматизации некоторых действий): https://www.rika-firenet.com/web/login

Как вы видите на странице, HTML-код выглядит так:

<form id="login" method="POST" action="/action_page.php" data-ajax="false">
<input type="text" data-theme="b" name="email" value="" placeholder="[email protected]">
<input type="password" data-theme="b" name="password" value="" placeholder="password">
<button type="submit" data-theme="a" data-icon="fa-sign-in" data-iconpos="right">
Connect
</button>
</form>

Итак, я попробовал это в python:

import requests
import urllib.parse

url = 'https://www.rika-firenet.com/'
url_login = url+'web/login'

client = requests.session()
payload = urllib.parse.urlencode({
'email':'[email protected]',
'password':'mypwd'
})

print("+-[url get] : {}".format(url_login))
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
r = client.get(url, headers=headers, allow_redirects=True)
print(r.cookies)

print("+-[url post] : {}".format(url_login))
p = client.post(url_login, data=payload, headers=headers, cookies=r.cookies)
print(p.content)

Я получаю куки в получении, но у меня есть исходная страница в ответ на запрос почты.

+-[url get] : https://www.rika-firenet.com/web/login
<RequestsCookieJar[<Cookie connect.sid=s%3Auzv2S7zjhW6Hs2S7hOKyx6icXhbSSSTx.t%2Fg32GT2s2zIbvGI3kq%2Fht%2FR3BDa8aPUwTmWl%2BYktKU for www.rika-firenet.com/>]>
+-[url post] : https://www.rika-firenet.com/web/login

Кто-то преуспел с этим PHP-кодом:

function login ()
{
global $login_url,$username_rika,$password_rika,$path_cookie;
$postinfo = "email=".$username_rika."&password=".$password_rika;
$status = false;
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_URL, $login_url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_FAILONERROR, true);

curl_setopt($ch, CURLOPT_COOKIEJAR, $path_cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $path_cookie); // file to read cookies in
//set the cookie the site has for certain features, this is optional
curl_setopt($ch, CURLOPT_COOKIE, "cookiename=0");
curl_setopt($ch, CURLOPT_USERAGENT,
"Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postinfo);
$return = curl_exec($ch);

// Retourne le numéro d'erreur de la dernière opération cURL.
$curl_errno = curl_errno($ch);
$curl_error = curl_error($ch);

if ($curl_errno > 0) {
echo "cURL Error ($curl_errno): $curl_error\n";
$status['connected'] = false;
$status['curl_errno'] = curl_errno($ch);
$status['curl_error'] = curl_error($ch);
exit; // mettre en veille en mode développement
}
else {
//echo "Data received phase 1 : $return\n";
$status['connected'] = true;
}
curl_close($ch);
return $status;
}

Но так как я не эксперт по php, я не очень понимаю, почему это работает.

Любая подсказка?

Спасибо

Greg

PS: После разрешения полный код для управления печами Rika можно найти в https://github.com/iero/Rika-Stove

0

Решение

Некоторые заметки:

  • Не кодируйте ваши данные с помощью urllib, позволять requests обрабатывать кодировку.
  • requests.session по умолчанию сохраняет файлы cookie в запросах, поэтому вам не нужно использовать cookies параметр.
  • requests следует перенаправления по умолчанию.
  • Вам не нужно подделывать User-Agent для этого сайта. Если вы хотите добавить несколько заголовков, вы можете сделать это в session объект, так что вам не придется использовать headers параметр для каждого запроса.

Код Python:

import requests

url = 'https://www.rika-firenet.com/'
url_login = url+'web/login'
s = requests.session()
#s.headers['User-Agent'] = 'Mozilla/5.0'
data = {'email':'[email protected]', 'password':'mypwd'}
r = s.post(url_login, data)

print(r.url)
print('Log out' in r.text)
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]