Передайте текст в python через поле формы CGI, которое ожидает файл - PullRequest
0 голосов
/ 27 августа 2018

У меня есть два сервера. Сервер A содержит скрипт Python upload.py для загрузки файла; этот скрипт ожидает, что файл будет передан в поле формы:

form = cgi.FieldStorage()

if "upload-file" not in form:
    print("Need an upload file")
else:
    fileItem = form["upload-file"]

    if not fileItem.file:
        print("Not a file")
    else:
        fileContent = fileItem.file.read()
        outFilePath = os.path.join("/some/path/", fileItem.filename)
        outFile = open(outFilePath, "wb")
        outFile.write(fileContent)
        # etc.

Этот скрипт работает, и способ обработки его ввода не может быть изменен из-за существующего пользовательского интерфейса HTML / JavaScript, который опирается на этот интерфейс.

Теперь я хочу вызвать вышеуказанный скрипт из другого скрипта python, находящегося на сервере B. Поэтому мне нужно сделать что-то похожее на это:

import requests

# Call script on server A
response = requests.post(
    "http://10.20.30.40/cgi-bin/upload.py",
    files = { "upload-file": "some file content" })

Это на самом деле создает файл на сервере A, но он называется upload-file. Поэтому я хочу контролировать значение fileItem.filename (в сценарии на сервере A) при вызове его с сервера B. Как я могу этого добиться? Имя поля CGI upload-file не должно изменяться. Я пытался использовать аргумент params метода post, но так не получилось (я новичок в python, и просто гуглюсь, пока иду вперед).

1 Ответ

0 голосов
/ 28 августа 2018

Нашел ответ:

files = {"upload-file": ("desired-file-name.xml", "some file content")}

response = requests.post(
    "http://10.20.30.40/cgi-bin/upload-xml.py",
    files = files)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...