Curl bricht den Download in Cygwin ab, aber nicht in OS X

Curl bricht den Download in Cygwin ab, aber nicht in OS X

Ich versuche, eine Kopie einer PostgreSQL-Datenbank von Amazon S3 in Cygwin herunterzuladen. Aber es werden durchweg Nullen ausgegeben, was zu einer nutzlosen Datei führt. Dies ist mein Curl-Befehl:

 curl `heroku.bat pgbackups:url` -o latest.dump --verbose

was ergibt: * STATUS: INIT => CONNECT-Handle 0x60002de60; Zeile 1011 (Verbindung Nr. -5000) * Hostname wurde NICHT im DNS-Cache gefunden * Versuch 54.231.1.232... * Handle wird hinzugefügt: conn: 0x600069f80 * Handle wird hinzugefügt: send: 0 * Handle wird hinzugefügt: recv: 0 * Curl_addHandleToPipeline: Länge: 1 * 0x60002de60 ist am Kopf der Sendepipe! * - Conn 0 (0x600069f80) send_pipe: 1, recv_pipe: 0 * STATUS: CONNECT => WAITCONNECT-Handle 0x60002de60; Zeile 1058 (Verbindung Nr. 0) % Gesamt % Empfangen % Xferd Durchschnittliche Geschwindigkeit Zeit Zeit Zeit Aktueller Dload Upload Gesamt verbraucht Verbleibende Geschwindigkeit 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Verbunden mit s3.amazonaws.com (54.231.1.232) Port 443 (Nr. 0) * Zertifikatsüberprüfungsstandorte erfolgreich festgelegt: * CA-Datei: /usr/ssl/certs/ca-bundle.crt CA-Pfad: keiner * SSLv3, TLS-Handshake, Client-Hallo (1): } [Daten nicht angezeigt] * ZUSTAND: WAITCONNECT => PROTOCONNECT-Handle 0x60002de60; Zeile 1171 (Verbindung Nr. 0) * SSLv3, TLS-Handshake, Server-Hallo (2): { [Daten nicht angezeigt] * SSLv3, TLS-Handshake, CERT (11): { [Daten nicht angezeigt] * SSLv3, TLS-Handshake, Server fertig (14): { [Daten nicht angezeigt] * SSLv3, TLS-Handshake, Client-Schlüsselaustausch (16): } [Daten nicht angezeigt] * SSLv3, TLS-Verschlüsselung ändern, Client-Hallo (1): } [Daten nicht angezeigt] * SSLv3, TLS-Handshake, Fertig (20): } [Daten nicht angezeigt] * SSLv3, TLS-Verschlüsselung ändern, Client-Hallo (1): { [Daten nicht angezeigt] * SSLv3, TLS-Handshake, Fertig (20): { [Daten nicht angezeigt] * SSL-Verbindung mit AES128-SHA * Serverzertifikat: Redigiert * SSL-Zertifikatsüberprüfung erfolgreich. * STATUS: PROTOCONNECT => DO-Handle 0x60002de60; Leitung 1190 (Verbindung Nr. 0)

GET /hkpgbackups/[email geschützt]/b007.dump?AWSA redigiert User-Agent: curl/7.34.0 Host: s3.amazonaws.com Akzeptieren:/

 * STATE: DO => DO_DONE handle 0x60002de60; line 1263 (connection #0)
 * STATE: DO_DONE => WAITPERFORM handle 0x60002de60; line 1384 (connection #0)
 * STATE: WAITPERFORM => PERFORM handle 0x60002de60; line 1395 (connection #0)
 * HTTP 1.1 or later with persistent connection, pipelining supported
 < HTTP/1.1 400 Bad Request
 < Transfer-Encoding: chunked
 < Date: Wed, 02 Jul 2014 21:03:39 GMT
 < Connection: close
 * Server AmazonS3 is not blacklisted
 < Server: AmazonS3
 { [data not shown]
 * STATE: PERFORM => DONE handle 0x60002de60; line 1565 (connection #0)
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
 * Closing connection 0

Das Ausführen dieses Befehls im OS X-Terminal aus demselben Subnetz führt weitgehend zur gleichen Ausgabe, außer dass ich für die http/1.1-Anforderung eine 200 erhalte.

Warum sollte ich also für den Mac eine 200 erhalten, für Cygwin unter Windows jedoch eine 400? Ich habe versucht, andere mögliche Variablen auszuschließen, aber Cygwin auf diesem Computer erhält keine 200. Ich kann Ihnen sagen, dass die redigierte URL in Cygwin mit der URL in der Heroku-Befehlsausgabe übereinstimmt und, soweit ich sehen kann, auf dem Mac dasselbe ist, mit Ausnahme des AWS-Zugriffsschlüssels. Ich verstehe nicht, warum sie unterschiedlich sein sollten?

Warum sollte das anders sein?

Als Referenz ist dies meinRessource.

Antwort1

Dies hätte funktionieren sollen, aber es würde nur funktionieren, wenn ich die Auswertung des Heroku-Befehls überspringe und einfach die URL-Ausgabe kopiere und einfüge UND NUR, wenn ich die URL in einfache Anführungszeichen setze.

curl -o neuester.dump 'https://example.com/wirklichLangeUndHässlicheUrl'

Der Grund, warum es unter OS X funktioniert, ist, dass die Ausgabe sehr lang ist und nicht verfälscht wird. Unter Cygwin wird sie jedoch verfälscht, da ich den Befehl heroku.bat verwende, um die Ausgabe abzurufen. Dies führt zu Windows-Einschränkungen – das heißt, es wird der sehr langen Zeile, die die URL unterbricht, ein Wagenrücklauf usw. hinzugefügt. Der andere Hinweis ist, dass curl einen 400-Fehler zurückgibt, der auf eine verfälschte URL hinweist. Die Lösung besteht darin, die Ausgabe an ein dos2unix-Programm weiterzuleiten, woraufhin curl wie vorgesehen reagiert.

curl -o latest.dump heroku.bat pgbackups:url | dos2unixund das Glück regiert.

verwandte Informationen