Curl работает, но Python запрашивает не - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь создать бота, который будет автоматически планировать комнаты для собраний в моей школе.В настоящее время есть веб-сайт, который занимается этим, но это очень утомительно.Мне удалось получить самую маленькую команду CURL, которая может успешно сделать это резервирование.Однако, когда я переключаюсь на использование запросов Python, возникает ошибка, как будто я забронировал слишком много сайтов.Однако, если я запускаю идентичную команду curl после нее, ошибки не возникает.Я думаю, что-то не так с HTTP-запросом, но я не знаю, с чего начать.

Curl:

    curl 'https://api3.libcal.com/process_roombookings.php?m=booking_mob&iid=1723' \
-XPOST \
-H 'Referer: https://api3.libcal.com/room_widget.php?gid=4066&iid=1723' \
--data 'gid=4066&sid%5B%5D=660065516&fname=<First Name>&lname=<Last Name>&email=<School Email>&q1=<Student ID>&q2=4-6&q3=Engineering&q4=CPE&qcount=4&fid=2166'

Запросы Python:

url = 'https://api3.libcal.com/process_roombookings.php'
    headers = {
        'Referer': 'https://api3.libcal.com/room_widget.php?gid=4066&iid=1723',
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'X-Requested-With': 'XMLHttpRequest'
    }
    params = (
        ('m', 'booking_mob'),
        ('iid', '1723'),
    )
    data = {
        'gid': '4066',
        'sid': ['660065216'],
        'fname': '<First Name>',
        'lname': '<Last Name>',
        'email': '<Personal email>',
        'q1': '<Student Id>',
        'q2': '4-6',
        'q3': 'Engineering',
        'q4': 'CPE',
        'qcount': '4',
        'fid': '2166'
    }

    request = requests.request('POST', url, headers=headers, params=params, data=data)

Вывод скручивания:

{"status":2,"msg":"<div class=\"alert alert-warning\"><p><strong>This booking is tentative only!<\/strong><\/p><p><span class='rm_book_tent'>Room I, 12:00am - 1:00am Friday, February 15, 2019 - Tentative<\/span><br\/><\/p><p>You must confirm the booking within 1 hour,  via the URL contained in the email just sent to you.<\/p><\/div>","type":""}

Вывод запросов Python:

{'status': 2, 'msg': '<div class="alert alert-danger"><p><strong>You have exceeded the booking limits/quota:</strong></p><p></p><p></p></div>', 'type': ''}

Скручивание вернется так же, как и оригинал.Так что я использую квоту только тогда, когда использую запросы, заставляя меня думать, что это какая-то другая ошибка.

Есть идеи, почему кто-то возвращает веб-сайт (status = 200) с ошибкой по сравнению с резервированием?

PS: я видел, как этот вопрос задавали несколько раз, но большинство, кажется, проблема с аутентификацией.Мой чувствует себя совершенно иначе.

1 Ответ

0 голосов
/ 13 февраля 2019

Я пытался с curl и запросами, получил то же сообщение об ошибке ({"status": 0, "msg": "Error - Данные пользователя не отправлены", "type": ""}, вот мой код для того, чтобызапросы на использование:

import requests

headers = {
    'Referer': 'https://api3.libcal.com/room_widget.php?gid=4066&iid=1723',
}

params = (
    ('m', 'booking_mob'),
    ('iid', '1723'),
)

data = {
  'gid': '4066',
  'sid[]': '660065516',
  'fname': '<First Name>',
  'lname': '<Last Name>',
  'email': '<School Email>',
  'q1': '<Student ID>',
  'q2': '4-6',
  'q3': 'Engineering',
  'q4': 'CPE',
  'qcount': '4',
  'fid': '2166'
}

response = requests.post('https://api3.libcal.com/process_roombookings.php', headers=headers, params=params, data=data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...