Ошибка 403 (Forbidden) возникает, когда сервер отказывается выполнить запрос, даже если он правильно сформирован. Это может происходить из-за различных причин, включая:
1. **Отсутствие необходимых заголовков**: Некоторые веб-сайты требуют определенные заголовки, такие как `User-Agent`, `Referer`, `Accept`, и другие, чтобы идентифицировать клиента. Если они отсутствуют или не соответствуют ожидаемым значениям, сервер может заблокировать ваш запрос.
2. **Проверка безопасности и боты**: Многочисленные сайты используют различные механизмы защиты от ботов, такие как CAPTCHA, проверки реферера и анализ поведения пользователя. Если сервер определяет, что запрос делает неавторизованный пользователь, он может вернуть ошибку 403.
3. **Куки и сессии**: Если для доступа к контенту требуются специальные куки или сессионные токены, их нужно правильно передавать в запросе. Убедитесь, что куки актуальны и соответствуют сессии, созданной в браузере.
### Как решить проблему:
1. **Проверка заголовков**: Убедитесь, что вы добавляете все необходимые заголовки. Пример:
```python
headers = {
'User-Agent': 'Ваш User-Agent',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'ru-RU,ru;q=0.9',
'Referer': 'https://cdek.shopping/',
# Другие заголовки
}
```
2. **Использование правильных куки**: Проверьте, что куки актуальны и не истекли. Куки можно посмотреть в инструменте разработчика в вашем браузере (обычно в разделе "Application" или "Storage").
3. **Использование Selenium**: Если сервер использует сложные механизмы защиты, такие как проверки JavaScript, может потребоваться использование инструмента, такого как Selenium, чтобы эмулировать поведение браузера. Однако это может быть более сложным подходом.
4. **Обработка редиректов**: Иногда причина 403 может быть связана с редиректами. Убедитесь, что ваш код правильно обрабатывает редиректы.
5. **Лимитирование частоты запросов**: Если вы выполняете запросы слишком быстро, это может привести к блокировке. Попробуйте добавлять задержки между запросами.
### Пример исправленного кода
Вот пример, как можно отправить запрос с правильными заголовками:
```python
import requests
url = "https://cdek.shopping/c/95/krossovki?min_price=7187&max_price=15000&sort-by=sale_desc&brands[]=24&is_sale=1&variations[]=41&variations[]=41.5&variations[]=42"
cookies = {
# Ваши куки здесь
}
headers = {
'User-Agent': 'Ваш User-Agent',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'ru-RU,ru;q=0.9',
'Referer': 'https://cdek.shopping/',
}
s = requests.Session()
response = s.get(url, cookies=cookies, headers=headers)
print(response.status_code)
if response.status_code == 200:
with open('sdek_index.html', 'w', encoding='utf-8') as file:
file.write(response.text)
else:
print("Ошибка при запросе:", response.text)
```
Попробуйте эти шаги и посмотрите, сохраняется ли ошибка 403.