Python HTTP-запрос без успеха - PullRequest
0 голосов
/ 28 апреля 2020

Я перехожу с VBA на Python и пытаюсь перенести некоторый код. Пока у меня хорошие результаты, но время от времени я застреваю.

Это тот случай.

from datetime import datetime
import requests
import re
from dateutil.relativedelta import relativedelta

date_from = datetime.now() - relativedelta(months=36)
date_to = datetime.now()


def login_tokyo(ism_imo):
    r_tokyo_entry = requests.get('https://apcis.tmou.org/public/')
    string_with_number = re.search("<span.*?>(.*?)</span>", r_tokyo_entry.text)
    numbers = re.findall('[0-9]+', str(string_with_number.group(1)))
    captcha = int(numbers[0]) + int(numbers[1])

    payload = {'captcha': captcha}

    r_tokyo_main = requests.post('https://apcis.tmou.org/public/?action=login',
                                 data=payload, cookies=r_tokyo_entry.cookies)

    payload1 = {'Param': '0', 'Value': ism_imo, 'imo': '', 'callsign': '', 'name': '', 'compimo': ism_imo,
                'compname': '', 'From': date_from.strftime('%d.%m.%Y'), 'Till': date_to.strftime('%d.%m.%Y'),
                'authority': '0', 'flag': '0', 'class': '0', 'ro': '0', 'type': "0", 'result': '0', 'insptype': '-1',
                'sort1': '0', 'sort2': 'DESC', 'sort3': '0', 'sort4': 'DESC'}

    r_tokyo_performance = requests.post('https://apcis.tmou.org/public/?action=getcompanies',
                                        data=payload1, cookies=r_tokyo_entry.cookies)
    print(r_tokyo_performance.text)


ism_imo = 3028090
login_tokyo(ism_imo)

При попытке напечатать print(r_tokyo_main.text) я ничего не получаю, когда мне предложили получить xml ответ.

Есть предложения? Отредактировано, чтобы иметь полный код.

Ответы [ 2 ]

2 голосов
/ 28 апреля 2020

В этом случае вам также необходимо отправлять файлы cookie при отправке почтового запроса.

r_tokyo_main = requests.post('https://apcis.tmou.org/public/?action=login', data=payload, cookies = r_tokyo_entry.cookies)

, поэтому, какие бы файлы cookie вы не получали в ответе, отправляйте их обратно

1 голос
/ 28 апреля 2020

Следующее должно работать. Когда вы запустите скрипт, вы получите этот текст SEARCH IN DATABASE со страницы назначения:

import re
import requests

def login_tokyo(s):
    r = s.get('https://apcis.tmou.org/public/')
    str_number = re.findall("<span[^>]+(.*?)</span>", r.text)[0]
    numbers = re.findall('[0-9]+', str_number)
    captcha = int(numbers[0]) + int(numbers[1])
    payload = {'captcha': captcha}
    r = s.post('https://apcis.tmou.org/public/?action=login', data=payload)
    check_text = re.findall('<b>(.*?)</b>', r.text)[0]
    print(check_text)

if __name__ == '__main__':
    with requests.Session() as s:
        login_tokyo(s)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...