Почему я не могу включить куки с запросом, даже до того, как они были включены и работали нормально [python3, запросы] - PullRequest
1 голос
/ 20 марта 2019

Не так давно я решил расширить свой словарный запас и найти для этого отличный сайт - Memrise.Я подумал, что это здорово, потому что вы можете сами создать новый набор слов и точно узнать, что вам нужно.Но затем возникла проблема - добавление новых слов занимает слишком много времени, поэтому я решил создать скрипт Python, который будет автоматически добавлять слова из словаря (например, текстовый файл, который выглядит как перевод слов) на веб-сайт.Для этой цели я использовал библиотеку запросов.Первое, что мне нужно сделать - это зайти на сайт.Следующее, что мне нужно сделать, это перейти на страницу редактирования и установить запрос на публикацию с данными о слове, который выглядит так:

columns {"1":"hi","2":"hello"}
level_id     8301249

Где слово находится в разделе столбцов, а уровень идентификатора -это идентификатор конечно.Но когда я попытался отправить его, я получил ответ, что куки отключены в вашем браузере.Я попытался отправить запрос на публикацию, как написано здесь: В вашем браузере должны быть включены файлы cookie [Python Requests] , но это не помогает. Также я добавил объект request.Session(), но это не так.тоже не поможет.Я думал, что проблема может быть вызвана из-за неполных заголовков, которые я отправляю с запросом, поэтому я добавил User-agent, но это тоже не помогает.Может быть эта ошибка как-то связана с ajax запросом?Я видел, что одним из решений является использование механизации, но есть ли способ сделать такую ​​работу с библиотекой requests python.Кроме того, я не могу понять, почему я смог войти на веб-страницу (в этом процессе тоже нужны файлы cookie), но не могу отправить запрос на публикацию?Вот мой код:

import requests

session_requests = requests.Session()
session_requests.headers.update({'User-Agent':'Mozilla/5.0 (X11; Linux x86_64...) Gecko/20100101 Firefox/60.0'})

#url of login page
login_url = "https://www.memrise.com/login/"

session_requests.get(login_url)
#one of three required parameters sending by login request ( 1 - username , 2 - password , 3 - csrftoken )
csrftoken = session_requests.cookies["csrftoken"]

#data for login request
data = {
    "username": "example@email.com",
    "password": "123456789",
    "csrfmiddlewaretoken": csrftoken
}


#url of course i want add words to
edit_course_url = 'https://www.memrise.com/course/2253971/example-course/edit/#l_8308032'
#login post request
loged_in = session_requests.post(
    login_url,
    data = data,
    headers = dict(referer=login_url)
)
#trying to enable cookies
edit = session_requests.get(edit_course_url)
cookies = dict(edit.cookies)
cookies['CSRFToken'] = cookies.pop('csrftoken')



#structure of new word , should be send
new_word = {
    'columns':{"1":"hi","2":"ro"},
    'level_id':'8308032'
}


add_word = session_requests.post(
    #Request URL
    'https://www.memrise.com/ajax/level/thing/add/',
    data=new_word,
    #reference to the site taken from post request , sended from browser
    headers =dict(referer='https://www.memrise.com/course/2253971/example-course/edit/'),
    cookies = cookies
)

print(loged_in.status_code , loged_in.reason)
print(add_word.status_code , add_word.reason

) 
...