我尝试使用bash使用curl请求发送下载的文件:
for secao in $tipo_dou;
do
download="curl -k --silent -fL -b cookies.iakim 'https://inlabs.in.gov.br/index.php?p=$ano-$mes-$dia&dl=$ano-$mes-$dia-$secao.zip' -H 'origem: 736372697074' -o
"
echo $download > $ano-$mes-$dia-$secao.sh
sh $ano-$mes-$dia-$secao.sh
rm -rf $ano-$mes-$dia-$secao.sh
done
通过这样做,我能够检索到我的本地机器的数据。
问题是:我必须检索该数据并将其发送到Azure存储,为此,我一直在尝试制作一个管道,例如:
filename=$ano-$mes-$dia&dl=$ano-$mes-$dia-$secao.zip
for secao in $tipo_dou;
do
download="curl -k --silent -fL -b cookies.iakim 'https://inlabs.in.gov.br/index.php?p=$ano-$mes-$dia&dl=$ano-$mes-$dia-$secao.zip' -H 'origem: 736372697074'
|
curl -X PUT -T - -H x-ms-blob-type:BlockBlob 'https://server.blob.core.windows.net/ape/filename?st=2023-01-25T18:41:00Z&se=2025-12-01T02:41:00Z&spr=https&sv=2021-06-08&sr=c&sig=SIGNATUREID'
"
echo $download > $ano-$mes-$dia-$secao.sh
sh $ano-$mes-$dia-$secao.sh
rm -rf $ano-$mes-$dia-$secao.sh
done
到目前为止,我只能登录到系统,我试图下载它,但我得到了这样的错误:
<?xml version="1.0" encoding="utf-8"?><Error><Code>AuthenticationFailed</Code><Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
RequestId:6b17fae3-601e-0065-5483-31ec49000000
Time:2023-01-26T12:43:31.1912380Z</Message>
为了执行这个脚本,我使用Node:
const { exec } = require('child_process');
const fs = require('fs');
const zlib = require('zlib');
const directoryFiles = fs.readdirSync('.');
const download = exec('sh xml-downloader.sh', (error, stdout, stderr ) => {
console.log('stdout: ', stdout);
console.log('stderr: ', stderr);
if (error !== null) {
console.log('exec error: ', error);
}
})
有没有别的办法让我做到这一点?
感谢您的帮助!
2条答案
按热度按时间blmhpbnm1#
@FabioFaria如前所述,您需要配置SAS令牌以使您的应用能够访问blob存储。
或者,由于您已经使用node运行应用程序,因此可以为node应用程序创建应用程序注册并直接使用blob客户端。
cczfrluj2#
我很感激你们的帮助。
然而,我采取了不同的方法来解决这个问题,现在我使用我创建的NodeJS函数,现在我直接将这些文件发送到API。
非常感谢你的帮助。