curl从脚本调用时返回HTTP代码503

时间:2014-07-17 12:16:23

标签: bash curl

我尝试调用一些REST API并使用curl获取生成的HTTP代码。如果在终端我输入:

curl -s -o /dev/null -I -w '%{http_code}' -X POST 'http://localhost/gitlab/api/v3/projects?private_token=my_private_token&name=blabla' -H 'Content-Length: 0'

它工作并返回HTTP代码201("创建")。现在我尝试在bash脚本中使用此命令,用变量替换url的一部分:

echo "Enter base URL :"
read gitlab_url # Here I type 'http://localhost/gitlab', to generate the same URL as in first code snippet
code_status=$(curl -s -o /dev/null -I -w '%{http_code}' -X POST '$gitlab_url/api/v3/projects?private_token=my_private_token&name=blabla' -H 'Content-Length: 0')
echo "$code_status"

然后它返回HTTP代码503(" Service Unavailable")。要查看"硬编码"之间是否存在任何差异网址和生成的网址,我这样做:

echo "curl -s -o /dev/null -I -w '%{http_code}' -X POST '$gitlab_url/api/v3/projects?private_token=my_private_token&name=blabla' -H 'Content-Length: 0'"
# Output :
curl -s -o /dev/null -I -w '%{http_code}' -X POST 'http://localhost/gitlab/api/v3/projects?private_token=my_private_token&name=blabla' 'Content-Length: 0'

如果我直接在终端中执行此操作,它会起作用并返回201。那么:如果我在脚本中使用它,为什么这个命令会失败呢?我错过了什么吗?

2 个答案:

答案 0 :(得分:4)

这是代理问题。如果我使用curl -v ....,我可以看到以下输出:

在终端中直接输入curl时,我有:

* About to connect() to localhost port 80 (#0)
*   Trying 127.0.0.1... connected
* Connected to localhost (127.0.0.1) port 80 (#0)

当我将它用于bash脚本时,我得到:

* About to connect() to proxy proxy.my.company port xxx (#0)
*   Trying xx.xx.xx.xx... connected
* Connected to proxy.my.company (xx.xx.xx.xx) port xxx (#0)

所以要修复它,我在脚本的顶部添加了这个:

export no_proxy=localhost,127.0.0.1
export http_proxy=""

我很惊讶必须这样做,因为我已经有一个已经引用no_proxylocalhost的环境变量127.0.0.1

答案 1 :(得分:1)

尝试将其作为bash -x script.sh运行。