Общая форма команды curl в CMD, которая работает:
curl -o latest.dump -L " https://s3.amazonaws.com/hkpgbackups/app28197640@heroku.com/xxxx.dump?AWSAccessKeyId=AKIAJSCBEZJRDOTGNGZQ&Expires=1411489500&Signature=%2F5zwQNX2N40022244
Но URL-адрес генерируется динамически, поэтому для меня, чтобы поместить это в сценарий .bat. ОК, нет проблем, вот мой сценарий .bat, который на бумаге должен работать.
@echo off
for /f "delims=" %%a in ('heroku pgbackups:url') do @set this_url=%%a
ECHO %this_url%
curl -v -o latest.dump -L %this_url%
Но выход выдает залог, потому что при первом '&', как вы могли ожидать. Эхо this_url
показывает полную строку с кавычками. Как я могу добавить или заставить заключить эту строку в кавычки?
Я пытался, но он возвращает тот же тип ошибки:
cmd /k ""curl -v -o latest.dump -l" "('heroku pgbackups:url')""
Некоторые могут спросить, почему бы не сделать это в Unix или CYGWIN? Я сделал это первым. Команда отлично работает на моем OS X персональном компьютере. Так должно работать в CYGWIN? Ну, я получаю ошибки того же типа.
Я попытался включить сценарий Perl с помощью библиотеки uri_escape
и вставил его. Но URL, который он передает, не распознается curl.
Принудительный вывод в одинарных кавычках приводит к тому, что URL начинается правильно, но заключительная одинарная кавычка помещается в последние несколько символов URL, что делает его бесполезным для скручивания.
Вывод heroku pgbackups:url
в консоли CMD:
"https://s3.amazonaws.com/hkpgbackups/app28197640@heroku.com/b080.dump?AWSAccess
KeyId=AKIAJSCBEZJRDOTGNGZQ&Expires=1411657655&Signature=MqzqBitAN7MADiLAsdAN4ZQk
RH0%3D"
Вывод файла .bat выше:
https://s3.amazonaws.com/hkpgbackups/app28197640@heroku.com/b080.dump?AWSAccessK
eyId=AKIAJSCBEZJRDOTGNGZQ
'Expires' is not recognized as an internal or external command,
operable program or batch file.
'Signature' is not recognized as an internal or external command,
operable program or batch file.
* About to connect() to s3.amazonaws.com port 443 (#0)
* Trying 205.251.243.66... % Total % Received % Xferd Average Speed Ti
me Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0co
nnected
* Connected to s3.amazonaws.com (205.251.243.66) port 443 (#0)
* SSLv3, TLS handshake, Client hello (1):
} [data not shown]
* SSLv3, TLS handshake, Server hello (2):
{ [data not shown]
* SSLv3, TLS handshake, CERT (11):
{ [data not shown]
* SSLv3, TLS handshake, Server finished (14):
{ [data not shown]
* SSLv3, TLS handshake, Client key exchange (16):
} [data not shown]
* SSLv3, TLS change cipher, Client hello (1):
} [data not shown]
* SSLv3, TLS handshake, Finished (20):
} [data not shown]
* SSLv3, TLS change cipher, Client hello (1):
{ [data not shown]
* SSLv3, TLS handshake, Finished (20):
{ [data not shown]
* SSL connection using AES128-SHA
* Server certificate:
* subject: C=US; ST=Washington; L=Seattle; O=Amazon.com Inc.; CN=s3.amazo
naws.com
* start date: 2014-04-12 00:00:00 GMT
* expire date: 2015-04-13 23:59:59 GMT
* subjectAltName: s3.amazonaws.com matched
* issuer: C=US; O=VeriSign, Inc.; OU=VeriSign Trust Network; OU=Terms of
use at https://www.verisign.com/rpa (c)10; CN=VeriSign Class 3 Secure Server CA
- G3
* SSL certificate verify result: unable to get local issuer certificate (
20), continuing anyway.
> GET /hkpgbackups/app28197640@heroku.com/b080.dump?AWSAccessKeyId=AKIAJSCBEZJRD
OTGNGZQ HTTP/1.1
> User-Agent: curl/7.21.7 (amd64-pc-win32) libcurl/7.21.7 OpenSSL/0.9.8r zlib/1.
2.5
> Host: s3.amazonaws.com
> Accept: */*
>
< HTTP/1.1 403 Forbidden
< x-amz-request-id: 4566C5AB208C1248
< x-amz-id-2: zF/zr+fbR/pE7nvF7vvUmOdZQeMzjSBI6SPLKH14LGAI5JAb2xyoLhuuDGBDhqcq
< Content-Type: application/xml
< Transfer-Encoding: chunked
< Date: Thu, 25 Sep 2014 14:51:46 GMT
< Server: AmazonS3
<
{ [data not shown]
100 231 0 231 0 0 592 0 --:--:-- --:--:-- --:--:-- 704
* Connection #0 to host s3.amazonaws.com left intact
* Closing connection #0
* SSLv3, TLS alert, Client hello (1):
} [data not shown]
'Expires' is not recognized as an internal or external command,
operable program or batch file.
'Signature' is not recognized as an internal or external command,
operable program or batch file.
Ошибка 403 указывает на то, что URL-адрес был заделан, но в противном случае он прошел, иначе я получил бы ошибку 400. По какой-то причине в сценарии «&» перенаправляется, потому что они интерпретируются в сценарии.
Если бы вы были мной, как бы вы запускали эту команду, чтобы динамически передавать этот URL, чтобы он не интерпретировался CMD, bash и т.д.? спасибо сэм