web form picture upload mimetype

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
taake
User
Beiträge: 125
Registriert: Donnerstag 14. Oktober 2010, 08:49

Moin, das Script steht soweit erstmal und scheint auch zu funktionieren.
Allerdings läd er kein Bild hoch und leider weiß ich nicht woran das liegen kann, ich poste hier mal wireshark output, script output und das script.
Hoffe das ihr mir sagen könnt woran das ganze liegen kann.

wireshark:
POST /redaktion/index.php HTTP/1.1
Accept-Encoding: identity
Content-Length: 55636
Host: shop.killtec.de
User-Agent: PyMOTW (http://www.doughellmann.com/PyMOTW/)
Connection: close
Content-Type: application/x-www-form-urlencoded
Authorization: Basic a2lsbHRlYzpWLm5ldy5TaG9w

Content-Type: multipart/mixed; boundary="===============3538629565701217456=="
MIME-Version: 1.0

--===============3538629565701217456==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: form-data; name="Sprachzeile"

deutsch
--===============3538629565701217456==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: form-data; name="txt_title"

******
--===============3538629565701217456==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: form-data; name="action"

bilderupload
--===============3538629565701217456==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: form-data; name="job"

artikelbildupload
--===============3538629565701217456==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: form-data; name="navigat"

navia
--===============3538629565701217456==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: form-data; name="anzeigen"

1
--===============3538629565701217456==
Content-Type: image/jpeg
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: form-data; name="bild"; filename="18926-00455.jpg"

/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAEOAQ4DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAg [...] Ow+Dd3sMs0trrORGx/tuEca9EUfhT69DCZJgcJUhWjCdWvTlzwrVqkpzjP+aOqUX2aStd2PiOIfFrjHiHC18uqYnBZZleIozw1bLsowFHC0KuGqRcJ0a1Wp7fFVITpycKkXiFTnF/AnZnz7+yz+zR8Mv2PvgR4C/Z0+DlrrNp8Ofhza6xBoEfiLXL7xJrk8/iHxFrHi7X9R1XWdRZri8vtX8S6/rGq3Hlrb2VvJetbadZ2NhDbWcH0FRRXrH5oFFFFABRRRQAUUUUAf/9k=
--===============3538629565701217456==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: form-data; name="artikel_nummer"

18926-000
--===============3538629565701217456==--HTTP/1.1 200 OK
Date: Mon, 06 Dec 2010 12:03:28 GMT
Server: Apache
Set-Cookie: PHPSESSID=393608878b8a91d13d620ed2ad4c76f7; path=/
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-cache, must-revalidate
Pragma: no-cache
Last-Modified: Mon, 06 Dec 2010 12:03:29 GMT
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html

Code: Alles auswählen

OUTGOING DATA:
Content-Type: multipart/mixed; boundary="===============5616250537987302203=="
MIME-Version: 1.0

--===============5616250537987302203==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: form-data; name="Sprachzeile"

deutsch
--===============5616250537987302203==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: form-data; name="txt_title"

*****
--===============5616250537987302203==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: form-data; name="action"

bilderupload
--===============5616250537987302203==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: form-data; name="job"

artikelbildupload
--===============5616250537987302203==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: form-data; name="navigat"

navia
--===============5616250537987302203==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: form-data; name="anzeigen"

1
--===============5616250537987302203==
Content-Type: image/jpeg
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: form-data; name="bild"; filename="18926-00455.jpg"

/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAEOAQ4DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL
[...]
/APguV8cv2SPilrf7Df7KPhvTfCPxQv8A4deFvFnjD9ovxFPb69deB9L8epq6afpXwu+HkFpcrqvjVLPSpL2TxP4ouTonh1J4THoGpTzw6lp2NfEUsNRnXrS5KUFeUrN9kkktZNtpJ/wAFQf8Ago98HvjzpfxL0T9tr9pbxP4l8mXUtEb4pfGHxv8AFvwTqqxz20uueENd+GvxA1zVvCGvaJqdvLb6mLO207RdatIXn1DwxfabqEVgLT5XljkIVnijDlnDL/ywV2nltrlWUiRmtrbUZ7iyuiqqE0fXYpRIBZxZ4C4Eeq+MLCGIb4PC9vd6hq1zKIWCX+rw3FjYaVdtMHsPtbpJfz6jb3/2VDfQtcWt7bPq6LW1PNsfUc3LEVLRozqNp8qpyioypSSjFfFNRp2d002trs8/MvDXg/LqOGpUMgwCqV8xwdCFCcXWr4mlXk6OLpKVedaqnTwlTFYmnUTU6Lw6xEZQlT97/Tj/AOCRP/Bc74L/APBRbRrD4V/EdNA+Cv7X2i6a8mu/CyTUXHhj4l2unRSHUPGnwR1fVZxc69pQWI3OueB7+STxz4If7RBqcOr6Rb2/ie//AHqVg3Sv8WgApc2t8ss1vf6XfW11ZahbT3dnqOmapaspsLu1vhc2mpWN/DKsUlg0l9Y6xDgHRPEV4pihk/t8/wCDYf8A4KSfHT44eK/AGVfCM3hXXTaNdNbW8lx8T9ZvPFXxYSVYPtAnv8Awl4n8Ir5zwXZ0yOMQKn4lza54j1z4leIdb8Y6v4t8T63418P6fq+p+IfG2u6r4u8R+INR0i4nTUrvWNZ1vUbu/tuEca9EUfhT69DCZJgcJUhWjCdWvTlzwrVqkpzjP+aOqUX2aStd2PiOIfFrjHiHC18uqYnBZZleIozw1bLsowFHC0KuGqRcJ0a1Wp7fFVITpycKkXiFTnF/AnZnz7+yz+zR8Mv2PvgR4C/Z0+DlrrNp8Ofhza6xBoEfiLXL7xJrk8/iHxFrHi7X9R1XWdRZri8vtX8S6/rGq3Hlrb2VvJetbadZ2NhDbWcH0FRRXrH5oFFFFABRRRQAUUUUAf/9k=
--===============5616250537987302203==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: form-data; name="artikel_nummer"

18926-000
--=======

Code: Alles auswählen

#!/usr/bin/python3.1

import os
import sys
import re
import urllib.request
import itertools
#from io import StringIO
import mimetypes
import base64
import email.mime.image
import email.mime.multipart
import email.mime.text
#import cStringIO
#import message

#import string
#import pickle


class MultiPartForm(object):
    """Accumulate the data to be used when posting a form."""
        
    def __init__(self):
        self.form_fields = []
        self.files = []
        self.boundary = "127.0.0.1.1000.4336.1291319528.064.1"
        return

    def get_content_type(self):
        return 'multipart/form-data; boundary=%s' % self.boundary

    def add_field(self, name, value):
        """Add a simple field to the form data."""
        self.form_fields.append((name, value))
        return

    def add_file(self, fieldname, filename, fileHandle, mimetype=None, encoding=None):
        """Add a file to be uploaded."""
        body = fileHandle.read()
        if mimetype is None:
            mimetype = mimetypes.guess_type(filename)[0] or 'application/octet-stream'
        self.files.append((fieldname, filename, mimetype, encoding, body))
        return

    def __str__(self):
        """Return a string representing the form data, including attached files."""
        # Build a list of lists, each containing "lines" of the
        # request.  Each part is separated by a boundary string.
        # Once the list is built, return a string where each
        # line is separated by '\r\n'.  
        parts = []
        part_boundary = '--' + self.boundary

        # Add the form fields
        parts.extend(
            [ part_boundary,
             'Content-Disposition: form-data; name="%s"' % name,
             '',
             value,
            ]
            for name, value in self.form_fields
            )

        # Add the files to upload
        parts.extend(
            [ part_boundary,
             'Content-Disposition: file; name="%s"; filename="%s"' % \
                (field_name, filename),
             'Content-Type: %s' % content_type,
             1 and 'Content-Transfer-Encoding: %s' % content_encoding or "",
             '',
             body,
            ]
            for field_name, filename, content_type, content_encoding, body in self.files
            )

        # Flatten the list and add closing boundary marker,
        # then return CR+LF separated data
        flattened = list(itertools.chain(*parts))
        flattened.append('--' + self.boundary + '--')
        flattened.append('')
        return '\r\n'.join(flattened)

if __name__ == '__main__':
    
    msg = email.mime.multipart.MIMEMultipart()
    file = open('/home/karloff/python/webupload/18926-00455.jpg', 'rb')
    ufile = email.mime.image.MIMEImage( file.read() ) 
    ufile.add_header('Content-Disposition', 'form-data' , name='bild' , filename='18926-00455.jpg')
                                
    sprachzeile = email.mime.text.MIMEText('deutsch')
    sprachzeile.add_header('Content-Disposition', 'form-data', name='Sprachzeile') 
                
    txt_title = email.mime.text.MIMEText('******')
    txt_title.add_header('Content-Disposition', 'form-data', name='txt_title')
                
    action = email.mime.text.MIMEText('bilderupload')
    action.add_header('Content-Disposition', 'form-data', name='action')
                
    job = email.mime.text.MIMEText('artikelbildupload')
    job.add_header('Content-Disposition', 'form-data', name='job')
                
    navigat = email.mime.text.MIMEText('navia')
    navigat.add_header('Content-Disposition', 'form-data', name='navigat')
                
    anzeigen = email.mime.text.MIMEText('1')
    anzeigen.add_header('Content-Disposition', 'form-data', name='anzeigen')
                
    artikel_nummer = email.mime.text.MIMEText('18926-000')
    artikel_nummer.add_header('Content-Disposition', 'form-data', name='artikel_nummer')
                
    abspeichern = email.mime.text.MIMEText('speichern')
    abspeichern.add_header('Content-Disposition', 'form-data', name='abspeichern')
                
                
                               
    msg.attach( sprachzeile )
    msg.attach(txt_title)
    msg.attach(action)
    msg.attach(job)
    msg.attach(navigat)
    msg.attach(anzeigen)

    msg.attach(ufile)
    msg.attach(artikel_nummer)

                
    print(msg.as_string())
    import sys
    #sys.exit()

    request = urllib.request.Request('http://***********/redaktion/index.php')
    request.add_header('User-agent', 'PyMOTW (http://www.doughellmann.com/PyMOTW/)')
    body = msg.as_string()
    request.add_header('Authorization' , 'Basic *******==')
    request.add_data(body)

    print()
    print('OUTGOING DATA:')
    print(request.get_data())

    print()
    print('SERVER RESPONSE:')
    print (urllib.request.urlopen(request).read())

Kann mir irgendwer sagen woran das liegen kann dass das nicht klappt mit dem Upload?
Antworten