我编写了以下脚本:
#!/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
参数。