script requests example ejecutar desde delete archivo python encoding post

requests - Enviar archivo usando POST desde un script de Python



response get python (3)

Lo mejor que puedo pensar es codificarlo usted mismo. ¿Qué tal esta subrutina?

from urllib2 import Request, urlopen from binascii import b2a_base64 def b64open(url, postdata): req = Request(url, b2a_base64(postdata), headers={''Content-Transfer-Encoding'': ''base64''}) return urlopen(req) conn = b64open("http://www.whatever.com/script.cgi", u"Liberté Égalité Fraternité") # returns a file-like object

(Bien, entonces este código simplemente envía datos POST. Pero aparentemente quieres datos codificados en varias partes, como si hicieras clic en el botón "Subir archivo", ¿verdad? Bueno, es una combinación bastante simple de lo que tengo aquí y las respuestas de la pregunta que vinculó).

Esto es casi un duplicado de Enviar archivo utilizando POST desde un script de Python , pero me gustaría agregar una advertencia: Necesito algo que maneje adecuadamente la codificación de campos y archivos adjuntos. Las soluciones que he podido encontrar explotan al tirar cadenas Unicode que contienen caracteres que no son Ascii en la mezcla. Además, la mayoría de las soluciones no codifican datos en base64 para mantener limpias las cosas a 7 bits.


PyCURL proporciona una interfaz para CURL desde Python.

http://curl.haxx.se/libcurl/python/

Curl hará todo lo que necesites. Puede transferir archivos binarios correctamente y admite muchas codificaciones. Sin embargo, debe asegurarse de que la codificación de caracteres adecuada sea un encabezado personalizado cuando se envíen archivos.

Específicamente, es posible que deba hacer una POST de "carga de archivos":

http://curl.haxx.se/docs/httpscripting.html (Sección 4.3)

Con curl (o cualquier otro cliente HTTP) puede que tenga que establecer la codificación del contenido:

Content-Type: text / html; charset = UTF-8

Además, tenga en cuenta que los encabezados de las solicitudes deben ser ascii, y esto incluye la url (así que asegúrese de que escapa correctamente sus URL posibles unicode. Hay escapes unicode para los encabezados HTTP) Esto se arregló recientemente en Python:

http://bugs.python.org/issue3300

Espero que esto ayude, hay más información sobre el tema, incluida la configuración de su juego de caracteres predeterminado en su servidor, etc.