2016-07-28 53 views
1

ich die Facebook-API bin mit einer Seite schreiben Bilder auf, kann ich von Web-Beitrag Bild mit dieser:Python Anfrage Post Bilder auf Facebook mit multipart/form-data

import requests 

data = 'url=' + url + '&caption=' + caption + '&access_token=' + token 
status = requests.post('https://graph.facebook.com/v2.7/PAGE_ID/photos', 
         data=data) 
print status 

Aber wenn ich will schreiben i den Fehler ein lokales Bild (unter Verwendung von multipart/form-data): ValueError: Data must not be a string.

ich diesen Code wurde mit:

data = 'caption=' + caption + '&access_token=' + token 
files = { 
    'file': open(IMG_PATH, 'rb') 
    } 

status = requests.post('https://graph.facebook.com/v2.7/PAGE_ID/photos', 
         data=data, files=files) 
print status 

ich lese (Python Requests: Post JSON and file in single request), dass vielleicht ist es nicht möglich, beiden Daten und Dateien in einer mehrteiligen codierten Datei zu senden, damit ich meinen Code aktualisiert:

data = 'caption=' + caption + '&access_token=' + token 
files = { 
    'data': data, 
    'file': open(IMG_PATH, 'rb') 
    } 

status = requests.post('https://graph.facebook.com/v2.7/PAGE_ID/photos', 
         files=files) 
print status 

aber das scheint nicht zu funktionieren, bekomme ich die gleichen wie oben Fehler.
Weißt du, warum es nicht funktioniert, und vielleicht eine Möglichkeit, das zu beheben.

Antwort

1

Pass in data als Wörterbuch:

data = { 
    'caption', caption, 
    'access_token', token 
} 
files = { 
    'file': open(IMG_PATH, 'rb') 
} 
status = requests.post(
    'https://graph.facebook.com/v2.7/PAGE_ID/photos', 
    data=data, files=files) 

requests nicht multipart/form-data Teile produzieren (zusammen mit den Dateien, die Sie hochladen) von einem application/x-www-form-urlencoded codierten String.

Die Verwendung eines Wörterbuchs für die POST-Daten hat den zusätzlichen Vorteil, dass requests für die korrekte Codierung der Werte sorgt; caption könnte insbesondere Daten enthalten, die ordnungsgemäß entfernt werden müssen.

+0

danke für deine antwort, die mir sehr geholfen hat. – plean