为什么curl -n 在一个脚本中失败,而在其他脚本中却失败?
在 MacOS High Sierra 上运行的curl 7.67.0
一个脚本中包含以下代码:
host="ftp.xxxxxx.com/public_html/"
/opt/local/bin/curl -n -T $file $host -v
给了我这个:
> USER xxxx
< 331 User xxxx OK. Password required
> PASS xxxxxxxxxx
< 230 OK. Current restricted directory is /
另一个脚本中的以下代码:
host="ftp.xxxxxx.com/public_html/"
/opt/local/bin/curl -n -T $file $host -v
给了我这个:
* Couldn't find host ftp.mgnewman.com in the .netrc file; using defaults
<snip>
> USER anonymous
< 331 User anonymous OK. Password required
> PASS [email protected]
0 0 0 0 0 0 0 0 --:--:-- 0:00:05 --:--:-- 0< 530 Login authentication failed
* Access denied: 530
这两个脚本都是 bash 脚本,位于同一台机器的同一目录中。只有一个 .netrc 文件。显然这是可以的,因为一个脚本成功地使用了它。卷曲代码和主机变量是相同的。事实上,第一个脚本中的代码是直接从第二个脚本中复制的。
如何弄清楚为什么一个curl 命令可以使用.netrc 文件而另一个命令不能?第二个脚本中一定有某些东西导致卷曲失败,但我不知道它可能是什么。
答案1
.netrc
你的问题是文件中的记录。您可以为第一台主机使用它,但不能为第二台主机使用。您可以做的就是为第二个主机添加这样的记录。预期的格式是:
machine <host name>
login <user-email or anonymous>
password <user-password or some mail for anonymous access>
根据操作系统的不同,所需的记录可以是:
machine <host name> login <user-email or anonymous> password <user-password or some mail for anonymous access>