Wir versuchen, ein Skript mit python (mit python-requests a.t.m.) zu schreiben, um eine POST-Anfrage an eine Site zu stellen, wo der Inhalt MultipartFormData sein muss. Wenn wir diese POST-Anfrage manuell (durch Ausfüllen des Formulars auf der Website und Post) mit wireshark, kam dies (kurze Version):
%Vor%Wenn wir versuchen, die Bibliothek python-requests zu verwenden, um dasselbe Ergebnis zu erzielen, wird Folgendes gesendet:
%Vor%Das Seltsame ist, dass der "general type" des Pakets tatsächlich mehrteilige / form-data ist, aber das einzelne gesendete Element (key = 'name', value = 'John Doe') hat den Typ application / x-pandoplugin (eine zufällige Anwendung auf meinem PC, denke ich).
Dies ist der verwendete Code:
%Vor%Gibt es eine Möglichkeit, den Inhaltstyp der einzelnen Elemente anzugeben, anstatt das Header-Argument zu verwenden (das nur den Typ des "ganzen" Pakets ändert)?
Wir denken, dass der Server nicht richtig reagiert, da er den Inhaltstyp, den wir senden, nicht verstehen kann.
Kleines Update: Ich denke, die verschiedenen Teile des mehrteiligen Inhalts sind jetzt identisch mit denen, die gesendet werden, wenn ich den POST im Browser mache, also ist das gut. Trotzdem führt der Server die Änderungen, die ich mit dem Skript gesendet habe, nicht durch. Das einzige, was noch anders ist, ist die Reihenfolge der verschiedenen Teile.
Zum Beispiel sendet mein Browser folgendes:
%Vor%Und das ist, was das Skript (mit Python-Anfragen) sendet:
%Vor%Könnte es sein, dass der Server in der Reihenfolge der Teile zählt? Laut Multipart-Upload-Formular: Ist die Bestellung garantiert? , ist es anscheinend? Und wenn ja, ist es möglich, eine Bestellung explizit über die Anfragenbibliothek zu erzwingen? Und um die Dinge in diesem Fall noch schlimmer zu machen: Es gibt eine Mischung aus einer Datei und nur Textwerten.
Eine Bestellung zu erzwingen, erscheint daher ziemlich schwierig. Dies ist die aktuelle Art, wie ich es tue:
%Vor%EDIT2: Ich habe eine Änderung im Anfrage-Plugin vorgenommen, um sicherzustellen, dass die Reihenfolge der Teile die gleiche ist wie in der ursprünglichen Anfrage. Das behebt das Problem nicht, daher denke ich, dass es keine einfache Lösung für mein Problem gibt. Ich werde eine E-Mail an die Entwickler der Seite senden und hoffe, dass sie mir helfen können!
Ihr Code sieht korrekt aus.
%Vor%... und sollte einen 'multipart / form-data' Beitrag senden.
und in der Tat, ich bekomme etwas wie das gepostet:
%Vor%Ich habe no Idee, warum Sie diesen seltsamen Content-Type-Header bekommen würden:
%Vor%Ich würde damit beginnen, das Pando-Web-Plugin vollständig von Ihrem Computer zu entfernen und dann Ihren Python-Request-Code erneut zu versuchen. (oder versuchen Sie es von einer anderen Maschine)
Python verwendet eine systemweite Konfigurationsdatei, um den MIME-Typ einer Datei zu erraten. Wenn diese Plugins Ihre Dateierweiterung mit ihrem eigenen Pantomime-Typ registrieren, werden Sie dies stattdessen tun.
Der sicherste Ansatz ist, dass Sie Ihren eigenen Mime-Typ erraten, der zu dem bestimmten Server passt, den Sie senden, und nur den nativen Python-Mime-Typ für Erweiterungen verwenden, an die Sie nicht gedacht haben.
Wie genau Sie den Inhaltstyp manuell mit Python-Anfragen angeben, weiß ich nicht, aber ich erwarte, dass es möglich sein sollte.
Tags und Links python python-requests urllib