Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 03.05.2013
Сообщений: 78
1

Авторизация с использованием post запроса на сайте

26.03.2018, 22:30. Показов 3538. Ответов 10
Метки нет (Все метки)

Моя первая попытка авторизации на сайте.


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import requests
 
def autoriz():
    session = requests.Session()
    url= 'https://zcoin.miningpoolhub.com/index.php?page=login'
 
    data= {'username':'qwerr19942017@gmail.com','password':'Overlord'}
 
    print(requests.get(url).text)
    print("-------------------------------------------")
    print(requests.post(url,data=data).text)
 
def main():
    autoriz()
 
if __name__ == '__main__':
    main()


Для проверки, я ожидал что в ответе с get запроса я найду "username",а с post запроса какой нибудь текст с сайта, но в место этого пришло что-то непонятно.



HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
<!DOCTYPE HTML>
<html lang="en-US">
<head>
  <meta charset="UTF-8" />
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" />
  <meta name="robots" content="noindex, nofollow" />
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
  <title>Just a moment...</title>
  <style type="text/css">
    html, body {width: 100%; height: 100%; margin: 0; padding: 0;}
    body {background-color: #ffffff; font-family: Helvetica, Arial, sans-serif; font-size: 100%;}
    h1 {font-size: 1.5em; color: #404040; text-align: center;}
    p {font-size: 1em; color: #404040; text-align: center; margin: 10px 0 0 0;}
    #spinner {margin: 0 auto 30px auto; display: block;}
    .attribution {margin-top: 20px;}
    @-webkit-keyframes bubbles { 33%: { -webkit-transform: translateY(10px); transform: translateY(10px); } 66% { -webkit-transform: translateY(-10px); transform: translateY(-10px); } 100% { -webkit-transform: translateY(0); transform: translateY(0); } }
    @keyframes bubbles { 33%: { -webkit-transform: translateY(10px); transform: translateY(10px); } 66% { -webkit-transform: translateY(-10px); transform: translateY(-10px); } 100% { -webkit-transform: translateY(0); transform: translateY(0); } }
    .bubbles { background-color: #404040; width:15px; height: 15px; margin:2px; border-radius:100%; -webkit-animation:bubbles 0.6s 0.07s infinite ease-in-out; animation:bubbles 0.6s 0.07s infinite ease-in-out; -webkit-animation-fill-mode:both; animation-fill-mode:both; display:inline-block; }
  </style>
 
    <script type="text/javascript">
  //<![CDATA[
  (function(){
    var a = function() {try{return !!window.addEventListener} catch(e) {return !1} },
    b = function(b, c) {a() ? document.addEventListener("DOMContentLoaded", b, c) : document.attachEvent("onreadystatechange", b)};
    b(function(){
      var a = document.getElementById('cf-content');a.style.display = 'block';
      setTimeout(function(){
        var s,t,o,p,b,r,e,a,k,i,n,g,f, tsBuCVO={"auQlMgNig":!+[]+!![]};
        t = document.createElement('div');
        t.innerHTML="<a href='/'>x</a>";
        t = t.firstChild.href;r = t.match(/https?:\/\//)[0];
        t = t.substr(r.length); t = t.substr(0,t.length-1);
        a = document.getElementById('jschl-answer');
        f = document.getElementById('challenge-form');
        ;tsBuCVO.auQlMgNig*=!+[]+!![];tsBuCVO.auQlMgNig-=+((!+[]+!![]+!![]+[])+(+!![]));tsBuCVO.auQlMgNig-=+((+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]));a.value = parseInt(tsBuCVO.auQlMgNig, 10) + t.length; '; 121'
        f.action += location.hash;
        f.submit();
      }, 4000);
    }, false);
  })();
  //]]>
</script>
 
 
</head>
<body>
  <table width="100%" height="100%" cellpadding="20">
    <tr>
      <td align="center" valign="middle">
          <div class="cf-browser-verification cf-im-under-attack">
  <noscript><h1 data-translate="turn_on_js" style="color:#bd2426;">Please turn JavaScript on and reload the page.</h1></noscript>
  <div id="cf-content" style="display:none">
    
    <div>
      <div class="bubbles"></div>
      <div class="bubbles"></div>
      <div class="bubbles"></div>
    </div>
    <h1><span data-translate="checking_browser">Checking your browser before accessing</span> miningpoolhub.com.</h1>
    
    <p data-translate="process_is_automatic">This process is automatic. Your browser will redirect to your requested content shortly.</p>
    <p data-translate="allow_5_secs">Please allow up to 5 seconds&hellip;</p>
  </div>
   
  <form id="challenge-form" action="/cdn-cgi/l/chk_jschl" method="get">
    <input type="hidden" name="jschl_vc" value="23d57e1ef240a54d975a0d46b650077e"/>
    <input type="hidden" name="pass" value="1522076628.61-kSxsCArg94"/>
    <input type="hidden" id="jschl-answer" name="jschl_answer"/>
  </form>
</div>
 
          
          <div class="attribution">
            <a href="https://www.cloudflare.com/5xx-error-landing?utm_source=iuam" target="_blank" style="font-size: 12px;">DDoS protection by Cloudflare</a>
            <br>
            Ray ID: 401a8177c9422579
          </div>
      </td>
     
    </tr>
  </table>
</body>
</html>
 
-------------------------------------------
<!DOCTYPE HTML>
<html lang="en-US">
<head>
  <meta charset="UTF-8" />
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" />
  <meta name="robots" content="noindex, nofollow" />
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
  <title>Just a moment...</title>
  <style type="text/css">
    html, body {width: 100%; height: 100%; margin: 0; padding: 0;}
    body {background-color: #ffffff; font-family: Helvetica, Arial, sans-serif; font-size: 100%;}
    h1 {font-size: 1.5em; color: #404040; text-align: center;}
    p {font-size: 1em; color: #404040; text-align: center; margin: 10px 0 0 0;}
    #spinner {margin: 0 auto 30px auto; display: block;}
    .attribution {margin-top: 20px;}
    @-webkit-keyframes bubbles { 33%: { -webkit-transform: translateY(10px); transform: translateY(10px); } 66% { -webkit-transform: translateY(-10px); transform: translateY(-10px); } 100% { -webkit-transform: translateY(0); transform: translateY(0); } }
    @keyframes bubbles { 33%: { -webkit-transform: translateY(10px); transform: translateY(10px); } 66% { -webkit-transform: translateY(-10px); transform: translateY(-10px); } 100% { -webkit-transform: translateY(0); transform: translateY(0); } }
    .bubbles { background-color: #404040; width:15px; height: 15px; margin:2px; border-radius:100%; -webkit-animation:bubbles 0.6s 0.07s infinite ease-in-out; animation:bubbles 0.6s 0.07s infinite ease-in-out; -webkit-animation-fill-mode:both; animation-fill-mode:both; display:inline-block; }
  </style>
 
    <script type="text/javascript">
  //<![CDATA[
  (function(){
    var a = function() {try{return !!window.addEventListener} catch(e) {return !1} },
    b = function(b, c) {a() ? document.addEventListener("DOMContentLoaded", b, c) : document.attachEvent("onreadystatechange", b)};
    b(function(){
      var a = document.getElementById('cf-content');a.style.display = 'block';
      setTimeout(function(){
        var s,t,o,p,b,r,e,a,k,i,n,g,f, aaMRcfi={"XX":+((!+[]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]))};
        t = document.createElement('div');
        t.innerHTML="<a href='/'>x</a>";
        t = t.firstChild.href;r = t.match(/https?:\/\//)[0];
        t = t.substr(r.length); t = t.substr(0,t.length-1);
        a = document.getElementById('jschl-answer');
        f = document.getElementById('challenge-form');
        ;aaMRcfi.XX*=+((!+[]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]));aaMRcfi.XX+=+((!+[]+!![]+!![]+[])+(!+[]+!![]+!![]));a.value = parseInt(aaMRcfi.XX, 10) + t.length; '; 121'
        f.action += location.hash;
        f.submit();
      }, 4000);
    }, false);
  })();
  //]]>
</script>
 
 
</head>
<body>
  <table width="100%" height="100%" cellpadding="20">
    <tr>
      <td align="center" valign="middle">
          <div class="cf-browser-verification cf-im-under-attack">
  <noscript><h1 data-translate="turn_on_js" style="color:#bd2426;">Please turn JavaScript on and reload the page.</h1></noscript>
  <div id="cf-content" style="display:none">
    
    <div>
      <div class="bubbles"></div>
      <div class="bubbles"></div>
      <div class="bubbles"></div>
    </div>
    <h1><span data-translate="checking_browser">Checking your browser before accessing</span> miningpoolhub.com.</h1>
    
    <p data-translate="process_is_automatic">This process is automatic. Your browser will redirect to your requested content shortly.</p>
    <p data-translate="allow_5_secs">Please allow up to 5 seconds&hellip;</p>
  </div>
   
  <form id="challenge-form" action="/cdn-cgi/l/chk_jschl" method="get">
    <input type="hidden" name="jschl_vc" value="bd40a88586ca70ed99e08b989a59bd84"/>
    <input type="hidden" name="pass" value="1522076628.724-bJx7JZVuiU"/>
    <input type="hidden" id="jschl-answer" name="jschl_answer"/>
  </form>
</div>
 
          
          <div class="attribution">
            <a href="https://www.cloudflare.com/5xx-error-landing?utm_source=iuam" target="_blank" style="font-size: 12px;">DDoS protection by Cloudflare</a>
            <br>
            Ray ID: 401a81788af22513
          </div>
      </td>
     
    </tr>
  </table>
</body>
</html>
Как правильно авторизироваться?
Миниатюры
Авторизация с  использованием post запроса на сайте  
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2018, 22:30
Ответы с готовыми решениями:

Авторизация на сайте посредством Post запроса
Авторизация на сайте по средствам Post запроса На сайте есть форма входа: &lt;form...

Авторизация на сайте ппри помощи post-запроса
На сайте есть форма входа: &lt;td class=&quot;bc&quot;&gt;&lt;table width=&quot;100%&quot; border=&quot;0&quot;...

Авторизация на сайте по средствам POST запроса. Как расшифровать gzip ответ?
Всем привет, кто может мне помочь или кто тоже столкнулся с похожей проблемой! Проще говоря решил...

Авторизация на сайте, requests, post
Всем привет! Буду благодарен за помощь. Прочитал очень много примеров и решений, но ничего не...

10
Эксперт Python
5177 / 3698 / 1174
Регистрация: 28.10.2013
Сообщений: 9,287
Записей в блоге: 1
26.03.2018, 23:16 2
Если забыть про то, что вы все равно делаете неверную попытку авторизации - не передаете скрытые поля, то в любом случае на этом сайте стоит защита от автоматических запросов: DDoS protection by Cloudflare. Это вы могли и сами увидеть в том html, который присылает сервер. И она весьма затрудняет попытки автовходов - моя попытка (с передачей всех скрытых полей) тоже не удалась.

Добавлено через 4 минуты
Тут нужно анализировать присылаемую страничку и пытаться понять, что сделал бы настоящий браузер получив ее.

Добавлено через 1 минуту
P.S. Правильные заголовки, увы, не спасают.
1
1283 / 900 / 479
Регистрация: 05.12.2013
Сообщений: 2,961
26.03.2018, 23:27 3
Можно попробовать headless-броузеры или через selenium отправлять
1
Эксперт Python
5177 / 3698 / 1174
Регистрация: 28.10.2013
Сообщений: 9,287
Записей в блоге: 1
27.03.2018, 00:06 4
ТабуретY,
Ну я тоже к этой мысли пришел - защита Cloudflare использует скрипт, который заставляет браузер автоматически через 5 секунд редиректиться на нужную страницу. Но из python'а (без вирт. браузера) мы этот скрипт никак не выполним... Разве что разобрать его алгоритм -
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(function(){
    var a = function() {try{return !!window.addEventListener} catch(e) {return !1} },
    b = function(b, c) {a() ? document.addEventListener("DOMContentLoaded", b, c) : document.attachEvent("onreadystatechange", b)};
    b(function(){
      var a = document.getElementById('cf-content');a.style.display = 'block';
      setTimeout(function(){
        var s,t,o,p,b,r,e,a,k,i,n,g,f, gVfRDuZ={"nQasjZJwiE":!+[]+!![]};
        t = document.createElement('div');
        t.innerHTML="<a href='/'>x</a>";
        t = t.firstChild.href;r = t.match(/https?:\/\//)[0];
        t = t.substr(r.length); t = t.substr(0,t.length-1);
        a = document.getElementById('jschl-answer');
        f = document.getElementById('challenge-form');
        ;gVfRDuZ.nQasjZJwiE*=+((!+[]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]));gVfRDuZ.nQasjZJwiE*=+((!+[]+!![]+[])+(!+[]+!![]+!![]));gVfRDuZ.nQasjZJwiE+=+((!+[]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]));a.value = parseInt(gVfRDuZ.nQasjZJwiE, 10) + t.length; '; 121'
        f.action += location.hash;
        f.submit();
      }, 4000);
    }, false);
  })();
там как я понял какая-то хитрая ссылка формируется...

Добавлено через 19 минут
Хотя нет - ссылка тут известна:/cdn-cgi/l/chk_jschl (хост, наверное, https://www.cloudflare.com)
По этой ссылке отправляются значение формы challenge-form - методом get.
Единственно, нужно заполнить значение (атрибут value) скрытого
HTML5
1
<input type="hidden" id="jschl-answer" name="jschl_answer"/>
, для чего нужно заменить значение вот этого словаря-объекта
Javascript
1
gVfRDuZ={"nQasjZJwiE":!+[]+!![]};
вот по этом алгоритму:
Javascript
1
gVfRDuZ.nQasjZJwiE*=+((!+[]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]));gVfRDuZ.nQasjZJwiE*=+((!+[]+!![]+[])+(!+[]+!![]+!![]));gVfRDuZ.nQasjZJwiE+=+((!+[]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]));a.value = parseInt(gVfRDuZ.nQasjZJwiE, 10) + t.length; '; 121'
В общем, javascript'ы разобрались бы... Наверное
1
1283 / 900 / 479
Регистрация: 05.12.2013
Сообщений: 2,961
27.03.2018, 00:35 5
главное это f.action += location.hash; от адреса берется часть после #

Добавлено через 5 минут
Цитата Сообщение от Garry Galler Посмотреть сообщение
вот по этом алгоритму:
Вообще тут просто надо прогнать через консоль chrome

t - это url в виде название.домен
gVfRDuZ={"nQasjZJwiE":2};
gVfRDuZ.nQasjZJwiE*=39;
gVfRDuZ.nQasjZJwiE*=23;
gVfRDuZ.nQasjZJwiE+=37; и т.д.
1
Эксперт Python
5177 / 3698 / 1174
Регистрация: 28.10.2013
Сообщений: 9,287
Записей в блоге: 1
27.03.2018, 00:41 6
ТабуретY,
Вот эти кортежи (!+[]+!![]+[]) каждый раз имеют разное число как пустых списков, так и операторов !! .
Поэтому значения будут каждый раз другими. Я синтаксис javascript плохо знаю, чтобы так с ходу понять как там вычисляется конечное число... Но, получается что для того, чтобы его вычислить - нужно сам скрипт сначала распарсить- и только потом конвертнуть в python формулу. Сложновато выходит...

Добавлено через 3 минуты
Имя словаря gVfRDuZ и его ключ также формируются случайным образом из набора символов.
1
║XLR8║
1211 / 908 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
02.04.2018, 14:56 7
Посетитель, JWT для авторизации самое оно
0
Эксперт Python
5177 / 3698 / 1174
Регистрация: 28.10.2013
Сообщений: 9,287
Записей в блоге: 1
02.04.2018, 16:31 8
outoftime,
Вы тему (в первом посте ТС) пробовали прочитать? Причем тут JSON Web Token? JWT используется для передачи данных авторизации в клиент-серверных приложениях. Замечу: cвоих клиент-серверных приложениях. А ТС пытается авторизоваться в чужом web-приложении. Если вы поняли о чем я.
0
║XLR8║
1211 / 908 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
02.04.2018, 19:33 9
Garry Galler, тогда это похоже на scrapy

С другой, стороны Headless Browser будет куда удобнее, к примеру https://github.com/jeanphix/Ghost.py Ну или любой другой https://github.com/dhamaniasad/HeadlessBrowsers Какой из них подойдет сходу не вспомню, давно таких задач небыло.
0
Эксперт Python
5177 / 3698 / 1174
Регистрация: 28.10.2013
Сообщений: 9,287
Записей в блоге: 1
02.04.2018, 19:48 10
Цитата Сообщение от outoftime Посмотреть сообщение
С другой, стороны Headless Browser будет куда удобнее
Ему это и так посоветовали сразу же: Selenium или PhantomJS. И, судя по его молчанию - задачу свою он давно решил с использованием этих инструментов.
---------------------------------------------
Мы же с ТабуретY просто рассуждали на тему "можно ли обойтись без вирт. браузеров". Чисто в познавательных целях - не предлагая ТС реализовать это.
1
║XLR8║
1211 / 908 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
03.04.2018, 00:19 11
Цитата Сообщение от Garry Galler Посмотреть сообщение
PhantomJS
Maintainer сказал что у него времени нету на его поддержку около месяца назад. Не знаю нашли ли добровольцев, но я в ближайшее время точно от его использования воздержусь (legacy пахнет, не сейчас, но вскоре)

Цитата Сообщение от Garry Galler Посмотреть сообщение
Selenium
ИМХО, достаточно громоздкое решение, хотя и работает как молоток.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2018, 00:19

Авторизация на сайте POST + SSL
Здравствуйте! Писал я программу, которая парсит сайт 1С и проверяет новые версии их программ. И...

Авторизация на сайте POST+Cookie
Тема для тех, кто знаком с DevelStudio 3.0 Есть такой код: $ch = curl_init(); curl_setopt($ch,...

Авторизация на сайте. POST - запрос
Миллион тем было, миллион тем будет. Ниже процедура и 2 вызова. для LDS - работает, для Life -...

Авторизация посредством POST-запроса
Доброго времени суток дорогие формучане. Назрела проблемка, нужно реализовать авторизацию в...

POST запрос, авторизация на сайте Intertelecom
Пытаю написать программу, которая проверяет остаток средств на лицевом счете, чтобы пополнять...

Программная авторизация на сайте, POST-запрос
Ребят, я этим никогда не интересовался, поэтому простите, если вопрос глупый. Не могу программно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru