Запрашивать функцию отправки сообщений запрещено - PullRequest
0 голосов
/ 19 февраля 2020

В настоящее время я пытаюсь получить результат из https://omia.org/search/, введя значения в поле ввода Trait id (OMIA id): с помощью BeautifulSoup. Поскольку я пытаюсь получить ответ со страницы, я знаю, что должен использовать запросы .post (). Однако, если я использую response = запросы.post ("https://omia.org/search/", params = {"omia_id": 179}), я получаю код состояния 403 вместе с сообщением о том, что мне нужно что-то сделать с CSRF готовить ie.

Что мне нужно сделать, чтобы получить правильный ответ с помощью .post ()?

1 Ответ

1 голос
/ 19 февраля 2020

Если вы получаете ошибку CSRF, вероятно, вам нужно включить заголовок CSRF и готовить ie. В этом случае вам потребуется csrftoken cook ie и соответствующий csrfmiddlewaretoken в теле запроса.

import requests
from bs4 import BeautifulSoup

with requests.Session() as s:
    res = s.get("https://omia.org/search/")
    cookies = '; '.join([x+"="+y for x,y in res.cookies.items()])

    soup = BeautifulSoup(res.text,"lxml")
    csrfmiddleware = soup.select_one('[name="csrfmiddlewaretoken"]')['value']

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3835.0 Safari/537.36',
        'Content-Type': 'application/x-www-form-urlencoded',
        'Cookie': cookies
    }

    data = f'csrfmiddlewaretoken={csrfmiddleware}&search_type=simple&query=test&query_type=or&result_type=phene'

    response = s.post('https://omia.org/results/', headers=headers, data=data, verify=False)
    print(response)

<Response [200]>

...