Board logo

标题: [原创]用wget简单检测代理服务器是否可用 [打印本页]

作者: lxmxn     时间: 2006-11-27 12:27    标题: [原创]用wget简单检测代理服务器是否可用

  平时上网的时候,有时会使用到代理服务器,常规的做法是去一些提供代理服务器列表的网站找一些我们想要的代理。但是上面有很多代理都是不可用的,难道要用手工一个个的去试哪个代理是否可用吗?用我们的批处理脚本就可以完成这个任务了。   利用wget的代理功能,来下载一个固定的网页,比如www.baidu.com,我下载的是www.ip138.com这个网页,来达到简单检测一些网站的代理服务器列表是否可用的目的。我用的提供代理服务器列表的网站是:http://www.cnproxy.com/proxyedu1.html   这个批处理并非可以完美的达到我们的目的,里面还有很多参数和格式可以修改,大家可以按照自己的意愿去修改里面的语句和参数。大家有什么意见也可以跟帖提出来。这个批处理最好可以放在一个文件夹中运行,因为中间会生成很多文件。   关于wget这个小工具,可以在论坛里搜索一下,就可以找到了。   在此,感谢 electronixtar 兄的提议和 redtek 兄的帮助。
@echo off&setlocal ENABLEDELAYEDEXPANSION&title 代理检测
if exist proxyedu1.html del proxyedu1.html /a/s >nul
if exist useproxy.txt del /a/q useproxy.txt
echo 于 %date% %time% 检测 http://www.cnproxy.com/proxyedu1.html 可用代理如下: >useproxy.txt
echo;>>useproxy.txt
echo ############################################################# >>useproxy.txt
wget http://www.cnproxy.com/proxyedu1.html >nul 2>nul
for /f "tokens=1,2 delims=^<trd>: " %%a in ('type proxyedu1.html ^| findstr /c:"HTTP" ') do (
	set set=
	set set=%%a
	set "set=!set:&#8205=!"
	set "set=!set!:%%b"
	echo 正在检测 !set! 代理,请稍等....
	wget -q -T 3 -t 1 -e "http_proxy=!set!" http://www.ip138.com -O - >nul 2>nul && echo 检测到 ******* !set! ******* 代理可用&&echo ----!set! >>useproxy.txt
)
start useproxy.txt
goto :eof
[ Last edited by lxmxn on 2006-11-27 at 01:01 PM ]

作者: 无奈何     时间: 2006-11-27 12:49
不错,不错,应该好好挖掘一下 wget 的功能。 wget 有几点给你补充一下: wget -q 不输出下载记录信息 wget -O - 将下载内容输出到屏幕,不写入文件。

作者: lxmxn     时间: 2006-11-27 12:53
  多谢版主的指点啊。   由于刚学习使用wget,所以还没发现这么多好用的参数呢,就连那个-t参数都是百度了才知道的。汗一个。      我再把代码完善一下。

作者: redtek     时间: 2006-11-27 22:06
这么好玩的代码,又实用又给下载提供了更多的方便~:))) 欣赏~~

作者: vkill     时间: 2006-11-27 22:38
我以前也试过wget && 没有试成,可能没有加参数吧!

作者: electronixtar     时间: 2006-11-27 23:29
顶啊,我们教育网用户的福音啊!

作者: electronixtar     时间: 2006-11-27 23:52
忘记加分了,原创辛苦,狂顶

作者: vkill     时间: 2006-11-28 00:28
2个月前弄的自动设置代理的就因为没有法子验证而遗憾,现在呵呵~thanks

作者: NaturalJ0     时间: 2006-11-28 00:41
好东西啊。 下次是不是准备加入排序功能了?

作者: electronixtar     时间: 2006-11-28 01:01
在加入一个自动生成 pac 配置文件的~~哈哈

作者: a9319751     时间: 2006-11-28 01:01
GNU Wget 1.10.2, a non-interactive network retriever. Usage: wget [OPTION]... [URL]... Mandatory arguments to long options are mandatory for short options too. Startup: -V, --version display the version of Wget and exit. -h, --help print this help. -b, --background go to background after startup. -e, --execute=COMMAND execute a `.wgetrc'-style command. Logging and input file: -o, --output-file=FILE log messages to FILE. -a, --append-output=FILE append messages to FILE. -d, --debug print lots of debugging information. -q, --quiet quiet (no output). -v, --verbose be verbose (this is the default). -nv, --no-verbose turn off verboseness, without being quiet. -i, --input-file=FILE download URLs found in FILE. -F, --force-html treat input file as HTML. -B, --base=URL prepends URL to relative links in -F -i file. Download: -t, --tries=NUMBER set number of retries to NUMBER (0 unlimits). --retry-connrefused retry even if connection is refused. -O, --output-document=FILE write documents to FILE. -nc, --no-clobber skip downloads that would download to existing files. -c, --continue resume getting a partially-downloaded file. --progress=TYPE select progress gauge type. -N, --timestamping don't re-retrieve files unless newer than local. -S, --server-response print server response. --spider don't download anything. -T, --timeout=SECONDS set all timeout values to SECONDS. --dns-timeout=SECS set the DNS lookup timeout to SECS. --connect-timeout=SECS set the connect timeout to SECS. --read-timeout=SECS set the read timeout to SECS. -w, --wait=SECONDS wait SECONDS between retrievals. --waitretry=SECONDS wait 1..SECONDS between retries of a retrieval. --random-wait wait from 0...2*WAIT secs between retrievals. -Y, --proxy explicitly turn on proxy. --no-proxy explicitly turn off proxy. -Q, --quota=NUMBER set retrieval quota to NUMBER. --bind-address=ADDRESS bind to ADDRESS (hostname or IP) on local host. --limit-rate=RATE limit download rate to RATE. --no-dns-cache disable caching DNS lookups. --restrict-file-names=OS restrict chars in file names to ones OS allows. --user=USER set both ftp and http user to USER. --password=PASS set both ftp and http password to PASS. Directories: -nd, --no-directories don't create directories. -x, --force-directories force creation of directories. -nH, --no-host-directories don't create host directories. --protocol-directories use protocol name in directories. -P, --directory-prefix=PREFIX save files to PREFIX/... --cut-dirs=NUMBER ignore NUMBER remote directory components. HTTP options: --http-user=USER set http user to USER. --http-password=PASS set http password to PASS. --no-cache disallow server-cached data. -E, --html-extension save HTML documents with `.html' extension. --ignore-length ignore `Content-Length' header field. --header=STRING insert STRING among the headers. --proxy-user=USER set USER as proxy username. --proxy-password=PASS set PASS as proxy password. --referer=URL include `Referer: URL' header in HTTP request. --save-headers save the HTTP headers to file. -U, --user-agent=AGENT identify as AGENT instead of Wget/VERSION. --no-http-keep-alive disable HTTP keep-alive (persistent connections). --no-cookies don't use cookies. --load-cookies=FILE load cookies from FILE before session. --save-cookies=FILE save cookies to FILE after session. --keep-session-cookies load and save session (non-permanent) cookies. --post-data=STRING use the POST method; send STRING as the data. --post-file=FILE use the POST method; send contents of FILE. HTTPS (SSL/TLS) options: --secure-protocol=PR choose secure protocol, one of auto, SSLv2, SSLv3, and TLSv1. --no-check-certificate don't validate the server's certificate. --certificate=FILE client certificate file. --certificate-type=TYPE client certificate type, PEM or DER. --private-key=FILE private key file. --private-key-type=TYPE private key type, PEM or DER. --ca-certificate=FILE file with the bundle of CA's. --ca-directory=DIR directory where hash list of CA's is stored. --random-file=FILE file with random data for seeding the SSL PRNG. --egd-file=FILE file naming the EGD socket with random data. FTP options: --ftp-user=USER set ftp user to USER. --ftp-password=PASS set ftp password to PASS. --no-remove-listing don't remove `.listing' files. --no-glob turn off FTP file name globbing. --no-passive-ftp disable the "passive" transfer mode. --retr-symlinks when recursing, get linked-to files (not dir). --preserve-permissions preserve remote file permissions. Recursive download: -r, --recursive specify recursive download. -l, --level=NUMBER maximum recursion depth (inf or 0 for infinite). --delete-after delete files locally after downloading them. -k, --convert-links make links in downloaded HTML point to local files. -K, --backup-converted before converting file X, back up as X.orig. -m, --mirror shortcut for -N -r -l inf --no-remove-listing. -p, --page-requisites get all images, etc. needed to display HTML page. --strict-comments turn on strict (SGML) handling of HTML comments. Recursive accept/reject: -A, --accept=LIST comma-separated list of accepted extensions. -R, --reject=LIST comma-separated list of rejected extensions. -D, --domains=LIST comma-separated list of accepted domains. --exclude-domains=LIST comma-separated list of rejected domains. --follow-ftp follow FTP links from HTML documents. --follow-tags=LIST comma-separated list of followed HTML tags. --ignore-tags=LIST comma-separated list of ignored HTML tags. -H, --span-hosts go to foreign hosts when recursive. -L, --relative follow relative links only. -I, --include-directories=LIST list of allowed directories. -X, --exclude-directories=LIST list of excluded directories. -np, --no-parent don't ascend to the parent directory. Mail bug reports and suggestions to <bug-wget@gnu.org>.

作者: lxmxn     时间: 2006-11-28 03:44
下次是不是准备加入排序功能了?
  兄弟说的是以什么排序?
在加入一个自动生成 pac 配置文件的~~哈哈
  不懂pac文件的格式,请指点一下。。

作者: snowbbbb     时间: 2006-11-28 03:48
先给vkill兄弟说声对不起~ 点着看的时候不小心点到那了 好奇之下看了看 结果扣了你一分 你也来扣我一分吧 或者哪天我见你发言的时候再给你加上一分

作者: NaturalJ0     时间: 2006-11-28 04:32
排序是指,用户指定一个网页要上,然后按连接这个网页的速度把可用代理显示出来。

作者: ccwan     时间: 2006-11-28 04:46
好啊!刚刚试过,很棒!给兄加分了。

作者: lxmxn     时间: 2006-11-28 05:58
  Re : NaturalJ0   谢谢兄的提议。   我想了一下,发现wget里面有一个 -S 参数可以统计下载的详细信息,包括了连接的速度,速度是通过前后两个时间间接得到的,如果要排序的话,必须要分析这个 -S 参数得到的信息,这样势必会比较麻烦。而且楼顶的代码里面,设置的wget超时获取网页的时间是3秒钟,这样检测出来的速度应该是可以的,如果你要更快的代理连接速度,那么可以修改 -T 参数的值。   Re ccwan :   多谢兄弟的鼓励。

作者: wang6610     时间: 2006-11-28 06:51
它会会接着检测第2、3...页吗?

作者: lxmxn     时间: 2006-11-28 11:39
  Re : wang6610   它只能检测指定的那一业网页代理列表,如果你想检测其它的页面的代理列表,可以手动添加URL到批处理里面。我也会尽量完善它的。

作者: yunlin     时间: 2006-11-28 13:10
DDDDDDDDDDDDDDD

作者: bigcarp     时间: 2007-1-8 23:39
好!顶

作者: lixinwu     时间: 2007-1-25 17:00
真是不错,可惜只能验证那一个网站的代理,换一个就不行了,那个网站的代理全部失效了,最好找个能天天更新的验证。或者把代码编写的智能一些,可以对付大部分的代理站点。

作者: lixinwu     时间: 2007-1-25 17:55
大侠能不能帮忙把这个网站的代理提出并验证啊?proxy.chedan.org/

作者: vkill     时间: 2007-1-26 02:01
Originally posted by lixinwu at 2007-1-25 17:55: 大侠能不能帮忙把这个网站的代理提出并验证啊?proxy.chedan.org/
不知道p-proxy能否帮你

作者: lixinwu     时间: 2007-1-26 03:03
好啊,请p-proxy大侠来帮帮忙啊!

作者: lixinwu     时间: 2007-1-26 04:23
哦,原来是个程序啊。。。。使用了一下,可惜不支持这个网站的代码

作者: lixinwu     时间: 2007-1-26 04:24
用楼主的代码改一下应该可以提取,楼主这个也简洁的多,体积小的多。。。

作者: honghunter     时间: 2007-12-4 07:16
不好意思,翻老贴了。 主要是一直没有看懂下面几句,希望能有大侠给讲解一二: 1 set set= 2 set set=%%a 3 set "set=!set:&#8205=!" 4 set "set=!set!:%%b" 主要疑问: 1,是否系统的关键字作为环境变量名字,不会有问题吗? 2,为什么每次设置前,都要设置为空一次?第一句可以省略吗? 3,看网页的原始内容是: <tr><td>202.105.182.20&#8205:80</td><td>HTTP</td><td>328,813,813</td><td>广东省珠海市</td></tr> 不太明白代理地址截取出来的算法。

作者: honghunter     时间: 2007-12-4 07:59
还有个问题,就是当源代码中的数据,变成如下形式的时候,怎么兼顾两张方式哪? <tr><td>211.142.213.11&#8204&#8205:80</td><td>HTTP</td><td>110,7203,7203</td><td>湖南省长沙市 移动</td></tr>

作者: honghunter     时间: 2007-12-4 08:04
REM $Id: get.proxy.bat 80 2007-12-04 08:21:12Z honghunter $
REM 原作者:lxmxn
REM 摘自:http://www.cn-dos.net/forum/viewthread.php?tid=25126&fpage=0&highlight=&page=1
REM 
IF "%ORG_PATH%"=="" CALL D:\dev\dps4e\check_proxy\env_setting.bat

@ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION&title 代理检测

IF "%1"=="sub1" GOTO sub1 

:main
IF EXIST useproxy.txt DEL /a/q useproxy.txt

FOR /L %%A IN (1,1,10) DO CALL %0 sub1 %%A
START useproxy.txt
GOTO :eof

:sub1
SHIFT /1
ECHO;>>useproxy.txt
ECHO 于 %date% %time% 检测 http://www.cnproxy.com/proxy%1.html 可用代理如下: >>useproxy.txt
ECHO;>>useproxy.txt
ECHO ############################################################# >>useproxy.txt
IF EXIST proxy%1.html DEL proxy%1.html /a/s >nul
wget http://www.cnproxy.com/proxy%1.html >nul 2>nul
:html_down_ok
title 正在检测proxy%1,请稍等....
FOR /f "tokens=1,2 delims=^<trd>: " %%a IN ('type proxy%1.html ^| findstr /c:"HTTP" ') DO (
        set set=
        set set=%%a
        SET "tempset=!set:&#8204&#8205=!" 
        IF "!tempset!"=="!set!" SET "tempset=!set:&#8205=!"
        set "set=!tempset!:%%b"
        ECHO 正在检测 !set! 代理,请稍等....
        wget -q -T 3 -t 1 -e "http_proxy=!set!" http://www.dps4e.com -O - >nul 2>nul && echo 检测到 ******* !set! ******* 代理可用&&echo ----!set! >>useproxy.txt
)
IF EXIST proxy%1.html DEL proxy%1.html /a/s >nul
GOTO :eof
[ Last edited by honghunter on 2007-12-4 at 04:40 PM ]

作者: jethroso     时间: 2008-11-20 12:20
刚试试不行啊?怎么全是######号呢? ? [ Last edited by jethroso on 2008-11-20 at 12:24 ]