Pourquoi curl envoie-t-il la ligne de commande avant le corps du message dans un PUT HTTP?
Question
J'émets la commande (ligne brisée pour la lisibilité):
curl -H"X-RequestIsAbsolutePath: F" \
-T /tmp/out \
-H'Content-Type: application/xml' \
"http://localhost:8182/metadata/036-Rotated.JPG"
J'envoie un corps de message XML. Je reçois une plainte de l'analyseur XML sur le serveur à propos du contenu non autorisé dans le prologue. J'ai ajouté une option --trace-acii à la ligne de commande et voir:
=> Send header, 270 bytes (0x10e) 0000: PUT /metadata/036-Rotated.JPG HTTP/1.1 0028: User-Agent: curl/7.19.4 (i386-apple-darwin9.6.0) libcurl/7.19.4 0068: OpenSSL/0.9.8i zlib/1.2.3 0083: Host: localhost:8182 0099: Accept: */* 00a6: X-RequestIsAbsolutePath: F 00c2: Content-Type: application/xml 00e1: Content-Length: 235 00f6: Expect: 100-continue 010c: == Info: Done waiting for 100-continue => Send data, 235 bytes (0xeb) 0000: curl -v -H"X-RequestIsAbsolutePath: F" "http://localhost:8182/me 0040: tadata/036-Original.JPG".<metadata>. <Core>. <ImageOrientati 0080: on editable="1" type="unsignedShort">. <value raw="3"/>. 00c0: </ImageOrientation>. </Core>.</metadata>.
Pourquoi curl envoie-t-il la ligne de commande elle-même dans le corps du message? Bien sûr, l'analyseur XML se plaindra. Comment faire pour que curl arrête de faire cela et envoie uniquement le contenu du fichier passé en argument à l'option -T?
FYI: J'ai capturé le texte brut envoyé sur le serveur et, oui, la ligne de commande est réellement envoyée. FYI # 2: J'utilise la dernière version de curl (7.19.4) sur Mac OS X.
La solution
Pourquoi curl envoie-t-il la ligne de commande elle-même dans le corps du message?
Ce n'est pas. Êtes-vous sûr de ne pas avoir mis la commande dans / tmp / out
?
curl n'a même pas accès à la ligne de commande, comme le montre votre trace ascii, car des éléments tels que les guillemets sont interprétés par le shell avant d'être passés au programme.