shell命令curl 检测代理是否可用
curl 检测代理
curl http://www.mimvp.com -m 10 -o out.html --socks4 91.99.99.11:1080
说明:
curl shell 抓取网页命令
-m 10 连接超时时间,最大为10秒
-o out.html 抓取网页输出到 out.html
--socks4 91.99.99.11:1080 代理协议采用 --socks4
此外,curl 7.21.7版本以上,还支持代理协议格式如下:
curl http://www.mimvp.com -m 10 -o out.html -x socks4://91.99.99.11:1080
或
curl http://www.mimvp.com -m 10 -o out.html --proxy socks4://91.99.99.11:1080
更多请详见米扑代理的代码示例:
https://proxy.mimvp.com/demo.php (Shell curl wget)
shell 完整脚本代码
#!/bin/bash
# sudo apt-get install autossh
# mimvp.com at 2015-02-09
# remote host and port
REMOTE_HOST=mimvp@115.29.237.28
REMOTE_PORT=22
# proxy ip addr
IP='91.99.99.11'
# proxy port
PORT=1080
# proxy spider url
CHECK_URL='http://www.baidu.com'
AUTOSSH_MONITOR_PORT=20000
LOG='check_proxy.log'
function __help(){
echo 'usage:
proxy [run | show | check | log]
example:
proxy run # run proxy
proxy show # show proxy information
proxy check # check proxy status
proxy log # show proxy log'
}
function __show(){
OUTPUT=`ps -ef | grep -v "grep" | grep "autossh"`
if [[ -n $OUTPUT ]]; then
echo $OUTPUT
else
echo 'Proxy not working'
fi
}
# options for autossh:
# -M specifies the base monitoring port to use.
# -f run in background (autossh handles this, and does not pass it to ssh.)
#
# options for ssh:
# -q Quiet mode.
# -T Disable pseudo-tty allocation.
# -f Requests ssh to go to background just before command execution.
# -n Redirects stdin from /dev/null (actually, prevents reading from stdin). This must be used when ssh is run in the background.
# -N Do not execute a remote command. This is useful for just forwarding ports (protocol version 2 only).
# -g Allows remote hosts to connect to local forwarded ports.
# -D port Specifies a local dynamic application-level port forwarding.
function __start(){
echo 'try to connect remote host...'
echo "autossh -M $AUTOSSH_MONITOR_PORT -f -qTnNg -D $REMOTE_PORT $REMOTE_HOST"
autossh -M $AUTOSSH_MONITOR_PORT -f -qTnNg -D $REMOTE_PORT $REMOTE_HOST
__show
}
function __check(){
cmd_4="curl $CHECK_URL -m 10 --socks4 $IP:$PORT"
cmd_5="curl $CHECK_URL -m 10 --socks5 $IP:$PORT"
echo "cmd_4 : $cmd_4"
echo "try to connect proxy $IP:$PORT"
dtime=$(date +'%Y-%m-%d__%H:%M:%S')
echo $dtime
RESPONSE=`$cmd_4`
echo "RESPONSE: $RESPONSE"
if [[ -n $RESPONSE ]]; then
echo $RESPONSE
echo 'Proxy is working...'
echo "$dtime -- Proxy is working" >> $LOG
else
echo 'Proxy not working...'
echo "$dtime -- Proxy not working" >> $LOG
fi
}
if [[ $# -eq 0 ]]; then
__help
else
action=$1
case $action in
'run')
__start
;;
'show')
__show
;;
'check')
__check
;;
'log')
tail -n 10 $log
;;
*)
__help
;;
esac
fi
curl 相关参数
homer@ubuntu:~/script$ curl --help
Usage: curl [options...] <url>
Options: (H) means HTTP/HTTPS only, (F) means FTP only
-G, --get Send the -d data with a HTTP GET (H)
-H, --header LINE Custom header to pass to server (H)
-I, --head Show document info only
-h, --help This help text
-0, --http1.0 Use HTTP 1.0 (H)
--http1.1 Use HTTP 1.1 (H)
--http2.0 Use HTTP 2.0 (H)
-4, --ipv4 Resolve name to IPv4 address
-6, --ipv6 Resolve name to IPv6 address
-l, --list-only List only mode (F/POP3)
--local-port RANGE Force use of these local port numbers
-L, --location Follow redirects (H)
-M, --manual Display the full manual
--mail-from FROM Mail from this address (SMTP)
--mail-rcpt TO Mail to this/these addresses (SMTP)
--mail-auth AUTH Originator address of the original email (SMTP)
-m, --max-time SECONDS Maximum time allowed for the transfer
-o, --output FILE Write output to <file> instead of stdout
--pass PASS Pass phrase for the private key (SSL/SSH)
-#, --progress-bar Display transfer progress as a progress bar
--proto PROTOCOLS Enable/disable specified protocols
--proto-redir PROTOCOLS Enable/disable specified protocols on redirect
-x, --proxy [PROTOCOL://]HOST[:PORT] Use proxy on given port
--proxy-anyauth Pick "any" proxy authentication method (H)
--proxy-basic Use Basic authentication on the proxy (H)
--proxy-digest Use Digest authentication on the proxy (H)
--proxy-negotiate Use Negotiate authentication on the proxy (H)
--proxy-ntlm Use NTLM authentication on the proxy (H)
-U, --proxy-user USER[:PASSWORD] Proxy user and password
--proxy1.0 HOST[:PORT] Use HTTP/1.0 proxy on given port
-p, --proxytunnel Operate through a HTTP proxy tunnel (using CONNECT)
--pubkey KEY Public key file name (SSH)
-e, --referer Referer URL (H)
-J, --remote-header-name Use the header-provided filename (H)
-O, --remote-name Write output to a file named as the remote file
--remote-name-all Use the remote file name for all URLs
-R, --remote-time Set the remote file's time on the local output
-X, --request COMMAND Specify request command to use
--resolve HOST:PORT:ADDRESS Force resolve of HOST:PORT to ADDRESS
--retry NUM Retry request NUM times if transient problems occur
--retry-delay SECONDS When retrying, wait this many seconds between each
--retry-max-time SECONDS Retry only within this period
-s, --silent Silent mode. Don't output anything
--socks4 HOST[:PORT] SOCKS4 proxy on given host + port
--socks4a HOST[:PORT] SOCKS4a proxy on given host + port
--socks5 HOST[:PORT] SOCKS5 proxy on given host + port
--socks5-hostname HOST[:PORT] SOCKS5 proxy, pass host name to proxy
--socks5-gssapi-service NAME SOCKS5 proxy service name for gssapi
--socks5-gssapi-nec Compatibility with NEC SOCKS5 server
-Y, --speed-limit RATE Stop transfers below speed-limit for 'speed-time' secs
-y, --speed-time SECONDS Time for trig speed-limit abort. Defaults to 30
--ssl Try SSL/TLS (FTP, IMAP, POP3, SMTP)
--ssl-reqd Require SSL/TLS (FTP, IMAP, POP3, SMTP)
-t, --telnet-option OPT=VAL Set telnet option
-z, --time-cond TIME Transfer based on a time condition
-u, --user USER[:PASSWORD][;OPTIONS] Server user, password and login options
--tlsuser USER TLS username
--tlspassword STRING TLS password
--tlsauthtype STRING TLS authentication type (default SRP)
-A, --user-agent STRING User-Agent to send to server (H)
-V, --version Show version number and quit
-w, --write-out FORMAT What to output after completion
--xattr Store metadata in extended file attributes
shell 参数表示
$n
$1 表示第一个参数,$2 表示第二个参数 …
$#
命令行参数的个数
$0
当前程序的名称
$?
前一个命令或函数的返回码
$*
以”参数1 参数2 … ” 形式保存所有参数
$@
以”参数1″ “参数2″ … 形式保存所有参数
$
本程序的(进程ID号)PID
$!
上一个命令的PID
curl POST登陆(未测试)
#!/bin/bash # mimvp.com at 2015-02-09 # # example: https://blog.mimvp.com/admin.php?sid=QuvD3j&frames=yes&admin_password=mimvp.com&admin_questionid=0&admin_answer=&submit=%E6%8F%90%E4%BA%A4 USERNAME='mimvp-blog' PASSWORD='mimvp.com' LOGIN_URL='https://blog.mimvp.com/admin.php' UPDATE_URL='https://blog.mimvp.com' COOKIES_FILE='curl_login_cookies.txt' LOG='curl_login.log' # login # -m connect timeout # -d your login information # -c save cookie to a temp file # -s silence mode curl $LOGIN_URL -m 10 --data-urlencode -d $LOGIN_URL"sid=QuvD3j&frames=yes&admin_password=$PASSWORD&admin_questionid=0&admin_answer=" -c $COOKIES_FILE -o curl_login.html # update # -b use the cookie file RESPONSE=`curl $UPDATE_URL -b $COOKIES_FILE -o curl_update.html | grep $USERNAME` dtime=`date +'%Y-%m-%d %H:%M:%S'` # write the response to log file echo "$dtime | $RESPONSE" >> $LOG # delete cookie temp file rm $COOKIES_FILE
参考推荐:
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2018-12-13 00:24:28
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!