我正在嘗試從 cygwin 中的 Amazon S3 下載 postgresql 資料庫的副本。但它全面產生零,產生無用的文件。這是我的捲曲指令:
curl `heroku.bat pgbackups:url` -o latest.dump --verbose
產生: * STATE: INIT => CONNECT 句柄 0x60002de60;第1011 行(連線#-5000) * 在DNS 快取中找不到主機名稱* 正在嘗試54.231.1.232... * 新增句柄:conn:0x600069f80 * 新增句柄:send:0 * 新增句柄:recv:0 * Curl_addHandleToPipeline:長度: 1 * 0x60002de60 位於傳送管道頭! * - Conn 0 (0x600069f80) send_pipe: 1,recv_pipe: 0 * STATE: CONNECT => WAITCONNECT 句柄 0x60002de60;第1058 行(連線#0) % 總計% 已接收% Xferd 平均速度時間時間目前Dload 上傳總花費左速度0 0 0 0 0 0 0 0 --:--:-- --:--:-- - -:--:-- 0* 連線至s3.amazonaws.com (54.231.1.232) 連接埠443 (#0) * 成功設定憑證驗證位置:* CAfile: /usr/ssl/certs/ca-bundle.crt CApath : 無 * SSLv3、TLS 握手、客戶端問候 (1): } [資料未顯示] * STATE: WAITCONNECT => PROTOCONNECT 句柄 0x60002de60;第1171 行(連線#0) * SSLv3,TLS 握手,伺服器問候(2):{ [資料未顯示] * SSLv3,TLS 握手,CERT (11):{ [資料未顯示] * SSLv3,TLS 握手,伺服器完成(14): { [資料未顯示] * SSLv3、TLS 握手、客戶端金鑰交換(16): } [資料未顯示] * SSLv3、TLS 變更密碼、客戶端問候(1): } [資料未顯示] * SSLv3 ,TLS 握手,完成(20): } [資料未顯示] * SSLv3,TLS 變更密碼,客戶端問候(1):{ [資料未顯示] * SSLv3,TLS 握手,完成(20): { [資料未顯示] * 使用 AES128-SHA 的 SSL 連線 * 伺服器憑證:已編輯 * SSL 憑證驗證正常。 * 狀態:PROTOCONNECT => DO 句柄 0x60002de60;第 1190 行(連接 #0)
取得 /hkpgbackups/[電子郵件受保護]/b007.dump?AWSA 編輯的使用者代理:curl/7.34.0 主機:s3.amazonaws.com 接受:/
* 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
在同一子網路的 OS X 終端機中執行此指令會產生大致相同的輸出,除了 http/1.1 請求得到 200 之外。
那為什麼 Mac 上我會得到 200,而 Windows 中 cygwin 會得到 400?我試圖消除其他潛在的變量,但是這台機器上的 cygwin 沒有得到 200。存取密鑰除外。不明白為什麼他們會有所不同?
為什麼會有所不同?
作為參考,這是我的資源。
答案1
這應該有效,但它運行的唯一方法是跳過 heroku 命令的評估,只複製貼上 url 輸出,並且僅當我將 URL 括在單引號中時。
捲曲 -o 最新的.dump 'https://example.com/reallyLongAndUglyUrl'
它在 OS X 中工作的原因是因為輸出很長且不會被破壞。但它確實在 cygwin 中被破壞,因為我使用 heroku.bat 命令來獲取輸出。這會強加 Windows 限制 - 也就是說,它會在破壞 URL 的很長的行中添加回車符號等。另一個線索是,curl 傳回 400 錯誤,表示 URL 已修改。解決方法是將輸出透過管道傳輸到 dos2unix 程序,並且curl 會以其應有的方式進行回應。
curl -olatest.dumpheroku.bat pgbackups:url | dos2unix
和幸福統治。