[英]curl return HTTP code 503 when called from a script
我嘗試調用一些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腳本中使用此命令,將部分網址替換為變量:
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
(“服務不可用”)。 要查看“硬編碼” URL和生成的URL之間是否有任何區別,我這樣做:
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
。 因此:如果在腳本中使用此命令,為什么該命令失敗? 有什么我想念的嗎?
這是一個代理問題。 如果我使用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=""
我對此感到非常驚訝,因為我已經有一個環境var no_proxy
,該環境已經引用了localhost
和127.0.0.1
嘗試將其作為bash -x script.sh
運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.