Cómo enviar JSON como parte de una solicitud POST multiparte

Tengo el siguiente formulario de solicitud POST (simplificado):

POST /target_page HTTP/1.1 Host: server_IP:8080 Content-Type: multipart/form-data; boundary=AaaBbbCcc --AaaBbbCcc Content-Disposition: form-data; name="json" Content-Type: application/json { "param_1": "value_1", "param_2": "value_2"} --AaaBbbCcc Content-Disposition: form-data; name="file"; filename="..." Content-Type: application/octet-stream  --AaaBbbCcc-- 

Intento enviar solicitud POST con requests :

 import requests import json file = "C:\\Path\\To\\File\\file.zip" url = 'http://server_IP:8080/target_page' def send_request(): headers = {'Content-type': 'multipart/form-data; boundary=AaaBbbCcc'} payload = { "param_1": "value_1", "param_2": "value_2"} r = requests.post(url, files={'json': (None, json.dumps(payload), 'application/json'), 'file': (open(file, 'rb'), 'application/octet-stream')}, headers=headers) print(r.content) if __name__ == '__main__': send_request() 

pero devuelve el estado 400 con el siguiente comentario:

 Required request part \'json\' is not present. The request sent by the client was syntactically incorrect. 

Por favor, señale mi error. ¿Qué debo cambiar para que funcione?

Usted mismo está configurando el encabezado, incluido un límite. No hagas esto requests genera un límite para usted y lo establece en el encabezado, pero si ya configuró el encabezado, la carga útil resultante y el encabezado no coincidirán. Sólo tienes que soltar todos los encabezados:

 def send_request(): payload = {"param_1": "value_1", "param_2": "value_2"} files = { 'json': (None, json.dumps(payload), 'application/json'), 'file': (os.path.basename(file), open(file, 'rb'), 'application/octet-stream') } r = requests.post(url, files=files) print(r.content) 

Tenga en cuenta que también le di a la parte del file un nombre de archivo (el nombre base de la ruta del file ).

Para obtener más información sobre las solicitudes POST de varias partes, consulte la sección avanzada de la documentación .