Czy można używać curl i wysyłać dane binarne bez podawania nazwy pliku? Na przykład możesz opublikować formularz za pomocą pliku binarnego za pośrednictwem --data-binary:
curl -X POST --data-binary @myfile.bin http://foo.com
Wymaga to jednak istnienia pliku. Miałem nadzieję, że będę w stanie rejestrować połączenia HTTP (takie jak usługi spoczynkowe) jako tekst polecenia curl w celu odtworzenia żądania. (to bardzo pomaga na przykład w debugowaniu tych usług)
Jednak rejestrowanie poleceń curl, które odwołują się do pliku, nie byłoby przydatne, więc miałem nadzieję, że faktycznie mogę zalogować surowe dane binarne, prawdopodobnie zakodowane w standardzie base64, a mimo to pozwolić ci skopiować i wkleić zalogowane polecenie curl i wykonać je.
Czy można używać curl i wysyłać dane binarne bez odwoływania się do pliku? Jeśli tak, jak to by działało? Jak wyglądałby przykład?
Odpowiedzi:
Możesz przesyłać dane do curl przez STDIN w następujący sposób:
@-
Mówicurl
wyciągnąć z stdin.Aby potokować dane binarne w celu zwijania (na przykład):
źródło
echo -e '\x03\xF1' | curl -X POST --data-binary @- http://foo.com
Gdzie\x03\xF1
są nieprzetworzone dane binarne jako szesnastkowe, co jest właściwie dokładnie tym, czego chcę.cat 1.jpg | curl -X POST --data-binary @- http://foo.com
. Działa jak urok. Aby sprawdzić poprawność, próbowałem również:cat 1.jpg | md5sum
imd5sum 1.jpg
. Obaj zwrócili tę samą wartość.Nie jestem pewien, dlaczego, ale dokładna linia poleceń sugerowana przez SLM nie działała dla mnie. Po niewielkiej modyfikacji działały następujące elementy:
źródło
Dodając do tej odpowiedzi,
echo
polecenie domyślnie dołącza nowy wiersz do swojego wyniku. Dodaje to\n
koniec danych binarnych, dlatego curl otrzyma również ten znak jako dane wejściowe.Aby tego uniknąć, możesz użyć
printf
polecenia lub-n
przełącznika w następujący sposób:lub
W ten sposób żadna nowa linia nie zostanie dodana do wejścia curl, a bajty podawane do curl będą dokładnie tymi, które przekazujesz
echo
.źródło