如何使用 bash 确保用户和传递在 curl 中是正确的



我编写了以下脚本:

#!/bin/bash
if [ $# -ne 1 ];then
echo "Usage: ./script <input-file>"
exit 1
fi
while read user pass; do
curl -iL --data-urlencode  user="$user" --data-urlencode password="$pass" http://foo.com/signin 1>/dev/null 2>&1
if [ $? -eq 0 ];then
echo "ok"
elif [ $? -ne 0 ]; then
echo "failed"
fi
done < $1

问题:

每当我运行甚至错误的用户&通过对我来说结果是ok

如何确定我的参数是否正确?

感谢

这是因为您正在从curl命令中获得输出。用随机用户/通行证键入该命令会得到以下信息:

$ curl -iL --data-urlencode  user=BLAHBLAH --data-urlencode password=BLAH http://foo.com/signin 
HTTP/1.1 301 Moved Permanently
Server: nginx/1.0.5
Date: Wed, 19 Feb 2014 05:53:36 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://www.foo.com/signin
. . .
. . .
<body>
<!-- This file lives in public/500.html -->
<div class="dialog">
<h1>We're sorry, but something went wrong.</h1>
</div>
</body>
</html>

因此,

$ echo $?
0

但将URL修改为垃圾:

$ curl -iL --data-urlencode  user=BLAHBLAH --data-urlencode password=BLAH http://foof.com/signin 
curl: (6) Could not resolve host: foof.com
$ echo $?
6

即使登录失败,HTTP服务器仍会返回一个带有错误消息的页面。由于curl能够检索到此页面,它将成功完成。

为了使curl在服务器错误时失败,您需要--fail参数。尽管根据curl手册页,这可能不是故障安全的,但值得一试。

如果--fail不起作用,您可以解析curl请求输出中的头,或者查看--write-out参数。

相关内容

  • 没有找到相关文章

最新更新