379 Stimmen

Wie man ein "multipart/form-data" mit Anfragen in Python senden?

Wie versendet man eine multipart/form-data avec requests in Python? Wie man eine Datei sendet, verstehe ich, aber wie man die Formulardaten durch diese Methode senden kann nicht verstehen.

0voto

vinaymk Punkte 84

Hier ist das Python-Snippet, das Sie benötigen, um eine große einzelne Datei als mehrteilige Formdaten hochzuladen. Mit NodeJs Multer Middleware läuft auf der Server-Seite.

import requests
latest_file = 'path/to/file'
url = "http://httpbin.org/apiToUpload"
files = {'fieldName': open(latest_file, 'rb')}
r = requests.put(url, files=files)

Für die Serverseite schauen Sie bitte in die Multer-Dokumentation unter: https://github.com/expressjs/multer hier wird das Feld single('fieldName') verwendet, um eine einzelne Datei zu akzeptieren, wie in:

var upload = multer().single('fieldName');

0voto

Himanshu sharma Punkte 6864

Dies ist eine Möglichkeit, eine Datei in einer mehrteiligen Anfrage zu senden

import requests
headers = {"Authorization": "Bearer <token>"}
myfile = 'file.txt'
myfile2 = {'file': (myfile, open(myfile, 'rb'),'application/octet-stream')}
url = 'https://example.com/path'
r = requests.post(url, files=myfile2, headers=headers,verify=False)
print(r.content)

Anderer Ansatz

import requests

url = "https://example.com/path"

payload={}
files=[
  ('file',('file',open('/path/to/file','rb'),'application/octet-stream'))
]
headers = {
  'Authorization': 'Bearer <token>'
}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)

Ich habe beide getestet, beide funktionieren einwandfrei.

-1voto

qarly_blue Punkte 341

Ich versuche, eine Anfrage an URL_server mit Anfrage-Modul in Python 3 zu senden. Dies funktioniert für mich:

# -*- coding: utf-8 *-*
import json, requests

URL_SERVER_TO_POST_DATA = "URL_to_send_POST_request"
HEADERS = {"Content-Type" : "multipart/form-data;"}

def getPointsCC_Function():
  file_data = {
      'var1': (None, "valueOfYourVariable_1"),
      'var2': (None, "valueOfYourVariable_2")
  }

  try:
    resElastic = requests.post(URL_GET_BALANCE, files=file_data)
    res = resElastic.json()
  except Exception as e:
    print(e)

  print (json.dumps(res, indent=4, sort_keys=True))

getPointsCC_Function()

Wo:

  • URL_SERVER_TO_POST_DATA = Server, an den wir die Daten senden werden
  • HEADERS = Gesendete Kopfzeilen
  • file_data = Gesendete Params

-2voto

Manish Ishwar Punkte 11

Von Postman generierter Code für den Datei-Upload mit zusätzlichen Formularfeldern:

import http.client
import mimetypes
from codecs import encode

conn = http.client.HTTPSConnection("data.XXXX.com")
dataList = []
boundary = 'wL36Yn8afVp8Ag7AmP8qZ0SA4n1v9T'
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=batchSize;'))

dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))

dataList.append(encode("1"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=file; filename={0}'.format('FileName-1.json')))

fileType = mimetypes.guess_type('FileName-1.json')[0] or 'application/octet-stream'
dataList.append(encode('Content-Type: {}'.format(fileType)))
dataList.append(encode(''))

with open('FileName-1.json', 'rb') as f:
  dataList.append(f.read())
dataList.append(encode('--'+boundary+'--'))
dataList.append(encode(''))
body = b'\r\n'.join(dataList)
payload = body
headers = {
  'Cookie': 'XXXXXXXXXXX',
  'Content-type': 'multipart/form-data; boundary={}'.format(boundary)
}
conn.request("POST", "/fileupload/uri/XXXX", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X