Есть один и тот же запрос который я пытаюсь прогнать через различные способы
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