Не могу повторить запрос POST - PullRequest
3 голосов
/ 13 февраля 2020

Существует этот веб-сайт: https://www.lyxoretf.co.uk/en/instit/products/search, и я пытаюсь сформировать правильный Python запрос POST, чтобы иметь возможность загрузить файл Excel и сохранить его локально.

Вы можете загрузить файл, щелкнув значок справа от раскрывающегося списка строк в верхней части таблицы. Записывая сетевую активность (и копируя запрос cURL), я обнаружил, что заголовки, которые мне нужно установить, а также данные формы (чтобы получить все столбцы в таблице):

HEADERS = {
    'Connection': 'keep-alive',
    'Pragma': 'no-cache',
    'Cache-Control': 'no-cache',
    'Origin': 'https://www.lyxoretf.co.uk',
    'Upgrade-Insecure-Requests': '1',
    'Content-Type': 'application/x-www-form-urlencoded',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
    'Sec-Fetch-User': '?1',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Sec-Fetch-Site': 'same-origin',
    'Sec-Fetch-Mode': 'navigate',
    'Referer': 'https://www.lyxoretf.co.uk/en/instit/products/search',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8',
}

FORM_DATA = "tabViewForm=tabViewForm&tabViewForm%3AtabView%3Aoptions5_focus=&tabViewForm%3AtabView%3Aoptions5_input=&tabViewForm%3AtabView%3Aoptions6_focus=&tabViewForm%3AtabView%3Aoptions6_input=&tabViewForm%3AtabView%3Aoptions7_focus=&tabViewForm%3AtabView%3Aoptions7_input=&tabViewForm%3AtabView%3Aoptions8_focus=&tabViewForm%3AtabView%3Aoptions8_input=&tabViewForm%3AtabView%3AcolumnsId_focus=&tabViewForm%3AtabView%3AcolumnsId=ETF+Name&tabViewForm%3AtabView%3AcolumnsId=Ticker&tabViewForm%3AtabView%3AcolumnsId=ISIN&tabViewForm%3AtabView%3AcolumnsId=Trading+Ccy&tabViewForm%3AtabView%3AcolumnsId=TER&tabViewForm%3AtabView%3AcolumnsId=AUM&tabViewForm%3AtabView%3AcolumnsId=Dividend+Treatment&tabViewForm%3AtabView%3AcolumnsId=Inception+Date&tabViewForm%3AtabView%3AcolumnsId=Fund+Type&tabViewForm%3AtabView%3AcolumnsId=Replication+Method&tabViewForm%3AtabView%3AcolumnsId=NAV&tabViewForm%3AtabView%3AcolumnsId=1Y&tabViewForm%3AtabView%3AcolumnsId=3Y&tabViewForm%3AtabView%3AcolumnsId=5Y&tabViewForm%3AtabView%3AcolumnsId=Index+Ticker&tabViewForm%3AtabView%3AcolumnsId=Factsheets&tabViewForm%3AtabView%3AcolumnsId=KIID&tabViewForm%3AtabView%3AcolumnsId=Prospectus&tabViewForm%3AtabView%3AcolumnsId=Mnemo&tabViewForm%3AtabView%3AcolumnsId=Tax+data+%28PEA%29&tabViewForm%3AtabView%3AshareDatatable_rppDD=10&tabViewForm%3AtabView_activeIndex=0&tabViewForm%3AtabView_scrollState=0&javax.faces.ViewState=-5754685498185340066%3A-4854945738216683285&tabViewForm%3AtabView%3AexportToXlsShare=tabViewForm%3AtabView%3AexportToXlsShare"

I затем получите повара ie, выполнив следующие действия:

response = session.get('https://www.lyxoretf.co.uk/en/instit/products/search')
cookie = session.cookies.get_dict()
cookie_string = "; ".join([str(x)+"="+str(y) for x,y in cookie.items()])

теперь готов сделать запрос на сообщение:

HEADERS["Cookie"] = cookie_string
r = requests.post(
    "https://www.lyxoretf.co.uk/en/instit/products-pretty/search-pretty",
    data=FORM_DATA,
    headers=HEADERS,
)

, но r.content оказывается b"", и код состояния 200. Я вижу, что заголовки ответа тоже неверны. Чего мне не хватает?

...