我正在编写我的第一个bash脚本
LANG="en_US.UTF8" ; export LANG
PROXY=$(shuf -n 1 proxy.txt)
export https_proxy=$PROXY
RUID=$(php -f randuid.php)
curl --data "mydata${RUID}" --user-agent "myuseragent" https://myurl.com/url -o "ticket.txt"
此脚本也使用curl,但如果代理已关闭,则会出现此错误:
无法连接PROXY:PORT
如何重新运行bash脚本,以便它可以从proxy.txt
获取另一个代理地址提前致谢
答案 0 :(得分:3)
循环运行直到curl
成功,例如:
export LANG="en_US.UTF8"
while true; do
PROXY=$(shuf -n 1 proxy.txt)
export https_proxy=$PROXY
RUID=$(php -f randuid.php)
curl --data "mydata${RUID}" --user-agent "myuseragent" https://myurl.com/url -o "ticket.txt" && break
done
注意&& break
命令末尾的curl
。
也就是说,如果curl
成功,就会突破无限循环。
如果您有多个curl
命令,并且需要所有命令才能成功,
然后将它们与&&
链接在一起,并在最后一个之后添加break
:
curl url1 && \
curl url2 && \
break
最后,正如@Inian指出的那样,
您可以使用--proxy
标记将代理网址传递给curl
,而无需设置https_proxy
的额外步骤,例如:
curl --proxy "$(shuf -n 1 proxy.txt)" --data "mydata${RUID}" --user-agent "myuseragent"
最后,请注意,由于随机性,随机选择的代理可能会多次出现,直到找到有效的代理。 避免这种情况,您可以通过混洗代理读取迭代而不是无限循环:
export LANG="en_US.UTF8"
shuf proxy.txt | while read -r proxy; do
ruid=$(php -f randuid.php)
curl --proxy "$proxy" --data "mydata${ruid}" --user-agent "myuseragent" https://myurl.com/url -o "ticket.txt" && break
done
我还小写了用户定义的变量, 因为不建议那些资本化。
答案 1 :(得分:0)
我知道我接受了@janos的答案,但由于我无法编辑他,我将添加此
response=$(curl --proxy "$proxy" --silent --write-out "\n%{http_code}\n" https://myurl.com/url)
status_code=$(echo "$response" | sed -n '$p')
html=$(echo "$response" | sed '$d')
case "$status_code" in
200) echo 'Working!'
;;
*)
echo 'Not working, trying again!';
exec "$0" "$@"
esac
如果它提供我想要的503状态代码,这将再次运行我的脚本:) 使用@janos代码,如果代理不工作,它将再次运行。 谢谢大家,我实现了我想要的。