Я пытаюсь загрузить копию базы данных postgresql из Amazon S3 в cygwin. Но она выдает нули по всем направлениям, что приводит к бесполезному файлу. Вот моя команда curl:
curl `heroku.bat pgbackups:url` -o latest.dump --verbose
что дает: * СОСТОЯНИЕ: INIT => CONNECT handle 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 * СОСТОЯНИЕ: CONNECT => WAITCONNECT handle 0x60002de60; строка 1058 (соединение № 0) % Всего % Получено % Xferd Средняя скорость Время Время Время Текущая загрузка Загрузка Всего потрачено Оставшаяся скорость 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-рукопожатие, Client hello (1): } [данные не показаны] * СОСТОЯНИЕ: 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): { [данные не показаны] * SSL-соединение с использованием AES128-SHA * Сертификат сервера: Исправлено * Проверка сертификата SSL прошла успешно. * СОСТОЯНИЕ: PROTOCONNECT => DO handle 0x60002de60; строка 1190 (соединение № 0)
ПОЛУЧИТЬ /hkpgbackups/[email protected]/b007.dump?AWSA отредактировано User-Agent: 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 из той же подсети дает в основном тот же результат, за исключением того, что я получаю 200 для запроса http/1.1.
Так почему я должен получить 200 для Mac, но 400 для cygwin в Windows? Я пытался исключить другие потенциальные переменные, но cygwin на этой машине не получает 200. Я могу сказать вам, что отредактированный URL в cygwin совпадает с URL в выводе команды heroku и таким же в Mac, насколько я могу судить, за исключением ключа доступа AWS. Не понимаю, почему они должны отличаться?
Почему здесь должно быть иначе?
Для справки это мойресурс.
решение1
Это должно было сработать, но единственный способ запустить его — пропустить оценку команды heroku и просто скопировать и вставить вывод URL, И ТОЛЬКО если я заключим URL в одинарные кавычки.
curl -o latest.dump 'https://example.com/reallyLongAndUglyUrl'
Причина, по которой это работает в OS X, заключается в том, что вывод очень длинный и не искажается. Но он искажается в cygwin, потому что я использую команду heroku.bat для получения вывода. Это накладывает ограничения Windows – то есть добавляет возврат каретки и т. д. к очень длинной строке, что нарушает URL. Другая подсказка в том, что curl возвращает ошибку 400, что указывает на искажённый URL. Исправление заключается в том, чтобы передать вывод в программу dos2unix, и curl отреагирует так, как и должно быть.
curl -o latest.dump heroku.bat pgbackups:url | dos2unix
и воцаряется счастье.