[JAVA] Ein Memo, das nüchtern von der Anfrage nach mehrteiligen / Formulardaten abhängig war

multipart/form-data Neulich habe ich die Kommunikationsverarbeitung mit HttpURLConnection von Java implementiert. Unter anderem habe ich einen Teil erstellt, der universell im Multipart- / Formulardatenformat gesendet werden kann, aber aus irgendeinem Grund nicht als Anforderung für Multipart- / Formulardaten erkannt wird, unabhängig davon, wie oft kommuniziert wird, und es dauert eine beträchtliche Zeit, um ihn aufzulösen. Ich habe es ausgegeben.

Die Ursache ist sehr lächerlich, gibt es noch jemanden, der davon abhängig ist? Es war so, aber ich würde es gerne als Memorandum schreiben.

Übrigens, als ich es zuerst schrieb, war es die Ursache. imageのコピー2.jpg

Anforderungshauptteil für mehrteilige / Formulardaten

Der allgemeine ist so. Die im folgenden Format zusammengestellten Inhalte werden auf den Körper gelegt und kommuniziert.

multipart/form-Datenbestand


--[Grenzzeichenfolge]
Content-Disposition: form-data; name="[Formularname]"

<<Formularinhalt>>
--[Grenzzeichenfolge]
Content-Disposition: form-data; name="[Formularname]"; filename="[Dateiname]"
Content-Type: text/plain

<<Dateiinhalt>>
--[Grenzzeichenfolge]
・
・
・
Fährt so viel fort, wie Sie senden
・
・
・
--[Grenzzeichenfolge]--

Schreiben Sie den Inhaltstyp des Anforderungsheaders nach mehrteiligen / Formulardaten und die Grenzzeichenfolge nach dem Inhaltstyp. Der Zeilenvorschubcode muss CRLF sein.

Aus irgendeinem Grund wird es nicht erkannt ...

Betrachtet man den Anforderungshauptteil der gesendeten Anforderung, so gibt es im Vergleich zum obigen Format keine Anzeichen von Missverständnissen, und es besteht kein Zweifel daran, dass die Grenzspezifikation des Inhaltstyps im Anforderungsheader korrekt ist. Hmm?

Ursache

Wenn Sie von Postman im Formulardatenformat kommunizieren und es mit einer Anfrage vergleichen, die normal erkannt wird,

multipart/form-Datenbestand


--[Grenzzeichenfolge]

Es gab kein erstes "-". .. Anfangs war ich mit dem Mechanismus von Mehrteil- / Formulardaten nicht sehr vertraut, daher habe ich mich auf die Sites im Netz bezogen, aber auf verschiedene Sites als Grenzzeichenfolge "-------- zufällige Zeichenfolge". Da es sich um eine Spezifikation handelte, habe ich sie gelernt und die Zeichenkette am Anfang mit "--------" angegeben, und es wurde nicht erkannt, dass am Anfang ein separates "-" erforderlich war. Es war, weil es schwierig war zu bestätigen, ob es tatsächlich entfernt wurde. (Es ist eine Geschichte, RFC richtig zu lesen.)

Das letzte Trennzeichen muss übrigens ein "-" hinter sich haben! (Erinnerung)

Lektion

Der Glaube ist beängstigend.

Schreiben Sie es auf, damit niemand mit ähnlichen Inhalten hängen bleibt. (Gibt es so eine Person?)

Apropos

Übrigens werden beim Testen der HTTP-Kommunikation die folgenden Sites empfohlen. Es gibt Endpunkte, die Informationen über von GET oder POST gesendete Anforderungen in Form von JSON, binären Antworten und verschiedenen anderen Endpunkten zurückgeben, also einfache Kommunikation Sie können die Kommunikation auch ziemlich sicher anhand der Bestätigung des Inhalts testen.

Wenn Sie es nicht wissen, verwenden Sie es bitte. Fortschritte machen. httpBin: https://httpbin.org/

Recommended Posts

Ein Memo, das nüchtern von der Anfrage nach mehrteiligen / Formulardaten abhängig war
[Circle CI] Ich war süchtig nach dem automatischen Test von Circle CI (Rails + MySQL) [Memo]
Eine Geschichte, der ich mit der automatischen Starteinstellung von Tomcat 8 unter CentOS 8 zweimal verfallen war
Ich war süchtig nach der Aufzeichnung des zugehörigen Modells
Beachten Sie, dass ich süchtig nach Stapelverarbeitung mit Spring Boot war
Beachten Sie, dass ich von den Einstellungen des Android-Projekts von IntelliJ IDEA abhängig war
Ich war süchtig nach Laradock + VSCode + xdebug
Ein Memo des Programms, mit dem Sie feststellen können, dass die Wahrscheinlichkeit eines Würfelwurfs etwa 1/6 beträgt
Ein Memo, das die einfache Chat-Anwendung von Node.js + socket.io enthält
Über die Sache, dass ich süchtig danach war, wie man Hashmap benutzt
Ich war süchtig nach der API-Version min23 von registerTorchCallback
Ich war süchtig nach der Rollmethode
Ich war süchtig nach dem Spring-Batch-Test
Ein Memo, wenn Sie den Zeitteil des Kalenders löschen möchten
Eine Geschichte, der ich beim Testen der API mit MockMVC verfallen war
Ich war süchtig nach einem einfachen Test von Jedis (Java-> Redis-Bibliothek)
Aufgenommen, weil ich süchtig nach der Standardeingabe der Scannerklasse war
Die Geschichte, ein Projekt zu bauen, das Maven mit Ant gebaut hat
Eine Geschichte, die süchtig nach EntityNotFoundException von getOne of JpaRepository ist
Machen Sie einen Rand links vom TextField
Stellen Sie die Zeit von LocalDateTime auf eine bestimmte Zeit ein
Ich war ein wenig süchtig nach dem S3-Prüfsummenvergleich, machen Sie sich also eine Notiz.
Eine Geschichte, dass eine Person, die ein solides iOS gemacht hat, möglicherweise von der Implementierung von Listener abhängig ist, wenn sie zu Android wechselt
[Lösung] Ein Memo, das mir schwer fiel, weil sich das Format der Sinatra-Validierung geändert hat.
Der Teil, dem ich in "Einführung in Ajax in Java-Webanwendungen" von NetBeans verfallen war
Eine Geschichte, nach der ich süchtig war, als ich einen Schlüssel bekam, der automatisch auf MyBatis ausprobiert wurde
Ich war süchtig nach NoSuchMethodError in Cloud-Endpunkten
Ich war süchtig nach getXxxx von ResultSet, weil es ein primitiver Typ ist (Java)
Süchtig nach dem Webpacker, der standardmäßig mit Rails 6 geliefert wird
Memo zum stillen Schreiben der Quelle, die brauchbar zu sein scheint, und das Ergebnis der Kompilierung Execution-Java
Eine Geschichte, die mich während des Komponententests von der impliziten Typkonvertierung von ActiveRecord abhängig machte
[Rails] So speichern Sie die Anforderungs-URL eines Benutzers, der nicht angemeldet ist, vorübergehend und kehren nach der Anmeldung zu dieser URL zurück
Wovon ich bei der Einführung der JNI-Bibliothek süchtig war
Ich war süchtig danach, die Update-Anweisung in MyBatis zu wiederholen
Technische Ursachen und Gegenmaßnahmen für Punkte, denen ich mit der Android-App und Kotlin verfallen war (2. Verarbeitung im Zusammenhang mit der Kamerafunktion von Android *)
Eine Geschichte, die von String () von Interface abhängig ist und von JdkDynamicAopProxy vertreten wird
[Ruby] So rufen Sie den Inhalt des Doppel-Hash ab
Was ich mit der Redmine REST API süchtig gemacht habe
Ein Programm, das die Anzahl der Wörter in einer Liste zählt
[jsoup] So erhalten Sie die gesamte Dokumentation
Die Geschichte, nach der ich beim Einrichten von STS süchtig war
Eine Sammlung von Mustern, die Sie kennen möchten, um den Code nicht zu komplizieren
[Controller] Ich möchte den numerischen Wert einer bestimmten Spalte aus der Datenbank abrufen (mein Memo).
Ein Memo, das unerwartet schwierig war, obwohl es einfach schien, zwischen zwei Entitäten auszutauschen
Ich habe eine GitHub-Aktion erstellt, die es einfach macht, das Ausführungsergebnis von RSpec zu verstehen
[Past POST] Ich werde einen Teil des Antwortprotokolls veröffentlichen, als ich Mentor von TECH :: CAMP war
[Circle CI] Eine Geschichte, der ich bei Start Building verfallen war
Versuchen Sie, die Idee eines zweidimensionalen Arrays mit einem eindimensionalen Array nachzuahmen
Mechanismus zum Konvertieren in eine Sprache, die der Browser erkennen kann
Ich möchte den Ablauf der Spring-Verarbeitungsanforderungsparameter verstehen
Die Geschichte von Collectors.groupingBy, die ich für die Nachwelt behalten möchte
Ein Hinweis, als ich süchtig danach war, Ubuntu auf WSL1 in WSL2 zu konvertieren