Wie lade ich Dateien mit der Anforderungsbibliothek von Python hoch?
P粉071559609
2023-08-16 18:44:37
<p>Ich verwende die Anforderungsbibliothek von Python, um eine einfache Aufgabe zum Hochladen einer Datei auszuführen. Ich habe nach Stack Overflow gesucht und niemand scheint das gleiche Problem zu haben, bei dem die Datei nicht vom Server empfangen wird: </p>
<pre class="brush:php;toolbar:false;">Importanfragen
url='http://nesssi.cacr.caltech.edu/cgi-bin/getmulticonedb_release2.cgi/post'
files={'files': open('file.txt','rb')}
Werte={'upload_file': 'file.txt', 'DB':'photcat', 'OUT':'csv', 'SHORT':'short'}
r=requests.post(url,files=files,data=values)</pre>
<p>Ich habe den Wert des Schlüsselworts „upload_file“ mit meinem Dateinamen ausgefüllt, denn wenn ich es leer lasse, würde es lauten: </p>
<pre class="brush:php;toolbar:false;">Fehler – Sie müssen eine Datei zum Hochladen auswählen! </pre>
<p>Jetzt bekomme ich: </p>
<pre class="brush:php;toolbar:false;">Die Größe der Datei file.txt beträgt Bytes, erfolgreich hochgeladen!
Ergebnisse des Abfragedienstes: Es gibt insgesamt 0 Zeilen. </pre>
<p>Dies geschieht nur, wenn die Datei leer ist. Daher weiß ich nicht, wie ich meine Datei erfolgreich senden kann. Ich weiß, dass die Datei gültig ist, denn wenn ich das Formular manuell ausfülle und die Website besuche, wird eine schöne Liste mit Übereinstimmungen zurückgegeben, was genau das ist, was ich möchte. Ich bin wirklich dankbar für alle Tipps. </p>
<p>Einige andere Threads, die verwandt sind (aber mein Problem nicht lösen): </p>
<ul>
<li>Python-Skript verwenden, um Dateien per POST zu senden</li>
<li>http://docs.python-requests.org/en/latest/user/quickstart/#response-content</li>
<li>Anfragen verwenden, um Dateien hochzuladen und zusätzliche Daten zu senden</li>
<li>http://docs.python-requests.org/en/latest/user/advanced/#body-content-workflow</li>
</ul><p><br /></p>
(2018) 新的Python requests库简化了这个过程,我们可以使用 'files' 变量来表示我们要上传一个多部分编码的文件
如果
upload_file
是指文件,请使用:然后
requests
将发送一个多部分表单POST请求体,其中upload_file
字段设置为file.txt
文件的内容。文件名将包含在特定字段的mime头中:
请注意
filename="file.txt"
参数。如果需要更多控制,可以使用元组作为
files
映射值,元组的长度应在2到4之间。第一个元素是文件名,其后是内容,还可以选择性地包含内容类型头和其他头的映射:这将设置一个替代文件名和内容类型,省略了可选的头。
如果您希望整个POST请求体来自文件(没有指定其他字段),则不要使用
files
参数,直接将文件作为data
进行POST。您可能还希望设置一个Content-Type
头,否则将不会设置任何头。参见Python requests - POST data from a file。