Как сделать так, чтобы запросы Python загружались в форму загрузки файла - PullRequest
0 голосов
/ 08 января 2019

Как правильно загрузить файл через эту форму загрузки файла на HTML-странице с помощью модуля запросов? Я пытался с помощью следующего кода, но я не уверен, как включить форму в мой код Python?

Логин HTTPDigestAuth работает, и я получаю 200 OK с удаленного сайта.

#!/usr/bin/env python3

import requests
from requests.auth import HTTPDigestAuth


with requests.Session() as s:
    url = "http://192.168.1.1/updatesettings.html"
    r = s.get(url, auth=HTTPDigestAuth('admin', '123456'))
    if r.status_code == 200:
        fin = open('backupsettings.conf', 'rb')
        files = {'file': fin}
        s.post(url, files=files)
    else:
        print("Login failed")

Форма HTML выглядит следующим образом

     <form method='post' ENCTYPE='multipart/form-data' action='uploadsettings.cgi' onSubmit='return isInProgress();'>
        <b>Tools -- Update Settings</b><br>
        <br>
        Update Broadband Router settings. You may update your router settings using your saved files.<br>
        <br>
        <table border="0" cellpadding="0" cellspacing="0">
           <tr>
              <td>Settings File Name:&nbsp;
              </td>
              <td><input type='file' name='filename' size='15'></td>
           </tr>
        </table>
        <p align="center"><input type='submit' value='Update Settings'></p>     
     </form> 

Прямо сейчас я получаю "ConnectionResetError: [Errno 104] Соединение сброшено узлом". Но это может быть связано с тем, что я не указал правильные параметры и прочее, поэтому вход в систему работает нормально, если я исключаю POST.

1 Ответ

0 голосов
/ 08 января 2019

Проверьте параметр действия в форме и URL-адрес в коде, первый - «.cgi», а другой - «.html», убедитесь, что заголовок вашего запроса также содержит правильный «enctype». Ошибка 104 заключается в том, что сервер неправильно обработал неправильный запрос на разрыв соединения. Используйте это для отладки запросов и посмотрите, что именно отправляется на сервер.

import logging
try:
    import http.client as http_client
except ImportError:
    # Python 2
    import httplib as http_client
http_client.HTTPConnection.debuglevel = 1
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...