Python запрашивает первый POST работает, но второй POST не работает - PullRequest
0 голосов
/ 22 марта 2019

Я сначала авторизируюсь с помощью selenium, а затем передаю файлы cookie в сеанс запросов:

from wsm_login import wsm_login
import requests
from lxml import html

username="username"
password="password"
port=9150
url="http://wallst4qihu6lvsa.onion/login"

cookies=wsm_login(username=username,password=password,url=url,port=port)
session = requests.session()
session.proxies = {}
session.proxies['http'] = 'socks5h://localhost:9150'
session.proxies['https'] = 'socks5h://localhost:9150'
headers = {
    "User-Agent":
        "Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0"
}
session.headers.update(headers)
for cookie in cookies:
    c = {cookie['name']: cookie['value']}
    session.cookies.update(c)

Я хочу просматривать страницы на сайте, но для этого мне нужно взаимодействовать с формой, чтобынажимайте кнопки для навигации по категориям / страницам.После того, как я вручную нажал на одну из категорий, вот что я скопировал из firefox для заголовков и параметров запроса POST:

POST /index HTTP/1.1
Host: wallst4qihu6lvsa.onion
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://wallst4qihu6lvsa.onion/index
Content-Type: application/x-www-form-urlencoded
Content-Length: 315
Cookie: PHPSESSID=o1gro0908lrel3s1lb7q3k90mn
Connection: keep-alive
Upgrade-Insecure-Requests: 1

form[_token]=AZUhb0nkdd3f_KnzzwKw8tRnime99UvHZoMGwZhBOzk
form[catT]
form[catM]
form[catB]
form[searchTerm]
menuCatT=1
form[limit]=15
form[rating]
form[vendorLevel]
form[vendoractivity]=0
form[quantity]
form[maxpricepunit]
form[shipsfrom]=0
form[shipsto]=0

Я успешно продублировал ручное действие в python со следующим:

url = "http://wallst4qihu6lvsa.onion/index"
page_content = session.get(url)
tree = html.fromstring(page_content.text)
token = tree.xpath("//input[@id='form__token']")[0].get("value")
PHPSESSID = session.cookies['PHPSESSID']

headers['Connection'] = "keep-alive"
headers['User-Agent'] = "Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0"
headers['Accept'] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
headers['Accept-Language'] = "en-US,en;q=0.5"
headers['Accept-Encoding'] = "gzip, deflate"
headers['Referer'] = "http://wallst4qihu6lvsa.onion/index"
headers['Content-Type'] = "application/x-www-form-urlencoded"
headers['Content-Length'] = "315"
headers['Upgrade-Insecure-Requests'] = "1"
headers['PHPSESSID'] = PHPSESSID

payload = {
    '_token': token,
    'catT': "",
    'catM': "",
    'catB': "",
    'searchTerm':"",
    'limit': "15",
    'rating': "",
    'vendorLevel': "",
    'vendoractivity': "0",
    'quantity': "",
    'maxpricepunit': "",
    'shipsfrom': "0",
    'shipsto': "0",
    'menuCatT': "1"
}

content = session.post(url=url, headers=headers, data=payload)

После перехода в эту категорию появляются кнопки, которые позволяют мне просматривать страницы.Вот что я скопировал и вставил из запроса POST после того, как сделал это вручную в Firefox:

POST /index HTTP/1.1
Host: wallst4qihu6lvsa.onion
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://wallst4qihu6lvsa.onion/index
Content-Type: application/x-www-form-urlencoded
Content-Length: 357
Cookie: PHPSESSID=o1gro0908lrel3s1lb7q3k90mn
Connection: keep-alive
Upgrade-Insecure-Requests: 1

form[_token]=AZUhb0nkdd3f_KnzzwKw8tRnime99UvHZoMGwZhBOzk
form[catT]=1
form[catM]=0
form[catB]=0
form[searchTerm]
form[limit]=15
form[rating]=0
form[vendorLevel]=1
form[vendoractivity]=0
form[quantity]=0
form[maxpricepunit]=0
form[shipsfrom]=0
form[shipsto]=0
form[sort]=pop_week_desc
form[page]=2

Я не смог скопировать это.Ответ просто возвращает меня на исходную страницу индекса.Вот моя попытка (которую я запускаю сразу после предыдущего блока кода):

headers['Content-Length'] = "357"

payload = {
    '_token': token,
    'catT': "1",
    'catM': "0",
    'catB': "0",
    'searchTerm':"",
    'limit': "15",
    'rating': "0",
    'vendorLevel': "1",
    'vendoractivity': "0",
    'quantity': "0",
    'maxpricepunit': "0",
    'shipsfrom': "0",
    'shipsto': "0",
    'page': '2',
    'sort': "pop_week_desc"
}

content = session.post(url=url, headers=headers, data=payload)
...