Найти - Пользователи
Полная версия: Пример Post или Get на python
Начало » Python для новичков » Пример Post или Get на python
1 2 3
Seganapa
Всем спасибо! Заработало, установил с помощью PIP
Seganapa
Для пробы написал код авторизации на letitbit.net

import requests 
url = 'http://letitbit.net'                                
urlTo = 'http://letitbit.net/'
payload = {'act':'login','login':'h1480276@rtrtr.com','password':'2DPEND9i3jvs'}
headers = {
           'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0',
           'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
           'Accept-Language' : 'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
           'Accept-Encoding' : 'gzip, deflate',
           'Connection' : 'keep-alive',
          }
headers1 = {'content-type' : 'application/json',
           'Host' : 'letitbit.net',
           'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0',
           'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
           'Accept-Language' : 'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
           'Accept-Encoding' : 'gzip, deflate',
           'Connection' : 'keep-alive',
           'Referer'  :  'http://letitbit.net/',
           'Content-Type'  :  'application/x-www-form-urlencoded',
           }
r = requests.get (url, headers=headers)
b = requests.post (urlTo, allow_redirects=True, headers=headers1, data=payload)
print b.status_code
print b.headers
print b.text
print b.history
#print r.content

Возвращает не авторизованную страницу…
Гляньте, пожалуйста, в чем причина???
reclosedev
Потому что нужно чтобы куки хранились, а для этого лучше использовать requests.Session.
Да и в headers1 у вас бред какой-то (host, content-type и connection requests и сам выставит).
import requests 
 
url = 'http://letitbit.net/'                                
 
payload = {'act':'login','login':'h1480276@rtrtr.com','password':'2DPEND9i3jvs'}
headers = {
   'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0',
   'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
   'Accept-Language' : 'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
   'Accept-Encoding' : 'gzip, deflate',
   'Connection' : 'keep-alive',
}
s = requests.Session(headers=headers)
b = s.post(url, allow_redirects=True, 
           headers={'Referer': 'http://letitbit.net/'}, data=payload)
...
Кстати, Referer при логине скорее всего не проверяется.
Дальше все запросы нужно делать через s (Session), в ней будут и хедеры и куки передаваться.
Seganapa
Спасибо! Получилось. Requests куки автоматом обрабатывает?
Seganapa
Если мне нужно в Post запросе передать данные в формате Json? правильна ли будет такая запись?:

post = '{"name":name, "password":password, "passwordhash":"","autologin":false}'

где name и password переменные
reclosedev
Seganapa
Requests куки автоматом обрабатывает?
Да, если использовать объект Session.
Seganapa
Если мне нужно в Post запросе передать данные в формате Json?
Если речь конкретно о letitbit то JSON там ни к чему.
Seganapa
правильна ли будет такая запись?:
Нет, переменные в строке сами себя не заменят волшебным образом.
Лучше воспользоваться json из стандартной библиотеки:
import json
post = json.dumps({"name": name, "password": password, "passwordhash": "", "autologin": False})
Можно и подстановку строк сделать, но не рекомендую (тут с экранированием и с кавычками нужно заморачиваться):
post = '{"name":%s "password":%s, "passwordhash":"","autologin":false}' % (name, password)
Seganapa
Просто я в php привык так делать:
$post = ‘json={“name”:“’ . $name . ‘”,“password”:“’ . $password . ‘”,“passwordhash”:“”,“autologin”:false}’;

Жаль на питоне так нельзя…
odnochlen
Seganapa
Если мне нужно в Post запросе передать данные в формате Json? правильна ли будет такая запись?:

post = ‘{“name”:name, “password”:password, “passwordhash”:“”,“autologin”:false}’
Вот у меня вопрос: а это вообще валидный запрос? Я знаю только 2 типа поста: www/urlencoded и multipart.

Seganapa
Просто я в php привык так делать:
$post = ‘json={“name”:“’ . $name . ‘”,“password”:“’ . $password . ‘”,“passwordhash”:“”,“autologin”:false}’;

Жаль на питоне так нельзя…
Можно, reclosedev показал как. Но не нужно.

И вообще, тему в сети.
Seganapa
odnochlen
Вот у меня вопрос: а это вообще валидный запрос? Я знаю только 2 типа поста: www/urlencoded и multipart.

У меня сниффер вот что видит:


Блин, никак не могу получить страницу… Что-то не проходит. Заголовки все проверил, url правильный…
Походу данные в запрос не правильно формирую

Пожалуйста,гляньте кто-нибудь
Пробовал по всякому…

import requests 
#import json
headers = {
           'User-Agent'  :  'Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0',
           'Accept'  :  'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
           'Accept-Language'  :  'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
           'Accept-Encoding'  :  'gzip, deflate',
           'Connection'  :  'keep-alive'
          }
 
url = 'http://ru.grepolis.com'
urlTo_start_page = 'http://ru.grepolis.com/start/index?action=login_from_start_page'
urlTo_start_page_next = 'http://ru.grepolis.com/start/index?action=fetch_news'
urlTo_login_to_game = 'http://ru.grepolis.com/start?action=login_to_game_world'                               
req = requests.Session(headers=headers)
onestep = req.get(url) 
name = 'Tartang'
password = '7TXzMQvUZt3qUqh'
#post = json.dumps({"name": name, "password": password, "passwordhash": "", "autologin": False})
post = 'json={"name":%s, "password":%s, "passwordhash":"","autologin":false}' % (name, password)
twostep = req.post(urlTo_start_page, data=post, allow_redirects=True, 
                   headers={'Referer': 'http://ru.grepolis.com/',
                            'X-Requested-With'  :  'XMLHttpRequest',
                            'Pragma'  :  'no-cache',
                            'Cache-Control'  :  'no-cache'
                            })
print twostep.text
print twostep.cookies
reclosedev
Тут обычный www/urlencoded, поэтому вот так должно сработать:
json_arg = json.dumps({"name": name, "password": password, "passwordhash": "", "autologin": False})
twostep = req.post(urlTo_start_page, data={"json": json_arg}...
не пробовал.

А не получалось со строками, потому что кавычек нет.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB