Python запрос возвращает 403, а burp suit или cURL 200, почему?

Есть один и тот же запрос который я пытаюсь прогнать через различные способы
POST /finder/search HTTP/2
Host: api.leboncoin.fr
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36
Content-Type: application/json
Accept: */*
Origin: https://www.leboncoin.fr
Referer: https://www.leboncoin.fr/ordinateurs/offres?shippable=1
Accept-Encoding: gzip, deflate, br
Accept-Language: ru-RU,ru;q=0.9

{"filters":{"category":{"id":"15"},"enums":{"ad_type":["offer"]},"location":{"shippable":true}},"limit":0,"limit_alu":0,"sort_by":"relevance","sort_order":"desc"}


ничего такого обычный запрос к апи чтоб получить информацию о товарах, я могу быть не опытен в этом деле но запрос без каких либо токенов куков и тд возвращает адекватный ответ который мне нужен.
Этот запрос возвращает 200 если я делаю его через burp suit [Repeater] и через консольную утилиту cURL на MacOc, но когда я пытаюсь сделать точно такой же запрос черезе requests, httpx, aiohttp возвращает одно и тоже 443
{"url":"https://geo.captcha-delivery.com/captcha/?initialCid=AHrlqAAAAAMAIahg-Q_Ny2oAWH5XNA==&cid=sFjkuux_GIDceGTddH76UUtxvSybykVu51pTzyn109f8_E_C~3vrgkJpNGdfr63btAOEvZKJzibYhTlmwYrZqZyH68cK0x8MCJQ~EWVhy~_0dGswq_s68JFAY6P7KRup&referer=http%3A%2F%2Fapi.leboncoin.fr%2Ffinder%2Fsearch&hash=05B30BD9055986BD2EE8F5A199D973&t=fe&s=7501&e=f1e123da68b5d063bcac8bb6d932d1335093ea7d43cb1559ce70a96bd45c0193"}

то есть каким то образом он определяет что запрос был сделан ботом а не мной ручками, так же хотел отметить что через пайтон обертку  pycurl все так же замечательно работает и возвращает 200.

мой код на питон aiohttp
import aiohttp
import asyncio

async def fetch_data():
    url = "https://api.leboncoin.fr/finder/search"

    headers = {
        "Host": "api.leboncoin.fr",
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
                      "AppleWebKit/537.36 (KHTML, like Gecko) "
                      "Chrome/129.0.0.0 Safari/537.36",
        "Content-Type": "application/json",
        "Accept": "*/*",
        "Origin": "https://www.leboncoin.fr",
        "Referer": "https://www.leboncoin.fr/ordinateurs/offres?shippable=1",
        "Accept-Encoding": "gzip, deflate, br",
        "Accept-Language": "ru-RU,ru;q=0.9",
    }

    data = '{"filters":{"category":{"id":"15"},"enums":{"ad_type":["offer"]},"location":{"shippable":true}},"limit":0,"limit_alu":0,"sort_by":"relevance","sort_order":"desc"}'

    async with aiohttp.ClientSession() as session:
        async with session.post(url, headers=headers, data=data, ssl=False) as response:
            print(response.status)
            print(await response.text())
                
asyncio.run(fetch_data())


requests
import requests

headers = {
    "Host": "api.leboncoin.fr",
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
                  "AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/129.0.0.0 Safari/537.36",
    "Content-Type": "application/json",
    "Accept": "*/*",
    "Origin": "https://www.leboncoin.fr",
    "Referer": "https://www.leboncoin.fr/ordinateurs/offres?shippable=1",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "ru-RU,ru;q=0.9",
}

data = '{"filters":{"category":{"id":"15"},"enums":{"ad_type":["offer"]},"location":{"shippable":true}},"limit":0,"limit_alu":0,"sort_by":"relevance","sort_order":"desc"}'

response = requests.post("https://api.leboncoin.fr/finder/search", headers=headers, data=data)

print(response.status_code)
print(response.text)


И еще момент, я перепробовал различные способы отправки данных и пришел к тому что скорее всего дело не в том как пайтон отправляет данные хотя возможно я не прав, потому что content length в берпе и керл на 1 меньше чем в пайтон запросе.

Я узнал что request httpx aiohttp используют под капотом OpenSSL а cURL - GnuTLS OpenSSL и NSS, и так же BURP SUIT использует под капотом свою собюственную экосистему под все эти задачи, возможно суть заключаеться в том что сервер по алгоритму работы запросов определяет что это бот и не дает мне проникнуть на сайт? Я не силен в этой теме, только щас начал в это погружаться, поэтому описал все что может вам помочь в теории понять в чем же все таки заключается причина такого поведения, да я бы мог использовать pycurl но мне бы хотелось понять в чем же причина, это не дает мне спокойно спать.

upd. Когда я выполнял запрос requests указывая прокси burp suit, запрос возвращал 200
  • Вопрос задан
  • 824 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы