alibench交互 获取测试链接全国打开情况

#!/usr/bin/perl
#use strict;
#use warnings;
use LWP::UserAgent;
use HTTP::Cookies;
use Encode;
use JSON;
use utf8;

binmode(STDIN, ‘:encoding(utf8)‘);
binmode(STDOUT, ‘:encoding(utf8)‘);
binmode(STDERR, ‘:encoding(utf8)‘);

my $new_task_url = ‘http://www.alibench.com/new_task.php‘;  #创建探测人物的URL
my $get_task_re_url = ‘http://www.alibench.com/query_task.php‘; # 获取探测结果URL

sub save_cookie {     ####保存COOKIE 并获取form name(下边创建任务post时会用到)
	my $UA = LWP::UserAgent->new;
	my $cookie_jar = HTTP::Cookies->new(
        file => "./ali_cookies.dat",
        autosave => 1,
		ignore_discard => 1,
    );
	$UA->cookie_jar($cookie_jar);   ##保存COOKIE
    my $response = $UA->get(‘http://www.alibench.com/‘);
	my ($traceroute_from,$traceroute_from_name);
	my $str = $response->content;
    foreach my $line (split(/input/,$str)){
		if ($line =~ m!.*name="traceroute_from" value="([^"]*)" id.*!) {
			$traceroute_from = $1;   #获取form
		}
		if ($line =~ m!.*name="traceroute_from_name" value="([^"]*)" id.*!) {
			$traceroute_from_name = $1;  #获取form name
		}
	}
	return ($traceroute_from,$traceroute_from_name);
}

sub create_task {
    my ($traceroute_from,$traceroute_from_name) = @_;
    my $UA = LWP::UserAgent->new;
	$UA->agent(‘Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0‘);
	$UA->cookie_jar({‘file‘ => ‘./ali_cookies.dat‘});
	$UA->default_header(   #定义headers
						‘Host‘ => ‘www.alibench.com‘,
						‘User-Agent‘ => ‘Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0‘,
						‘Accept‘ => ‘application/json, text/javascript, */*; q=0.01‘,
						‘Accept-Language‘ => ‘zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3‘,
						‘Accept-Encoding‘ => ‘gzip, deflate‘,
						‘Content-Type‘ => ‘application/x-www-form-urlencoded; charset=UTF-8‘,
						‘X-Requested-With‘ => ‘XMLHttpRequest‘,
						‘Referer‘ => ‘http://www.alibench.com/‘,
						‘Connection‘ => ‘keep-alive‘,
						‘Pragma‘ => ‘no-cache‘,
						‘Cache-Contro‘ => ‘no-cache‘,
	);
    my $response = $UA->post("$new_task_url",[‘task_from‘ => ‘self‘,     ##post数据
										‘traceroute_from‘ => "$traceroute_from",
										‘traceroute_from_name‘ => "$traceroute_from_name",
										‘target‘ => ‘www.test.com‘,   ##定义需要探测的URL
										‘target2‘ => ‘‘,      
										‘is_pk‘ => ‘false‘,  ##对比开关
										‘ac‘ => ‘http‘,      ##测试类型为http
										‘http_assign_time‘ => ‘20‘,  ##任务下发时间
										‘isps[]‘ => ‘1‘,  ##需要探测的服务商
										‘isps[]‘ => ‘4‘,
										‘http_method‘ => ‘get‘,
										‘http_gzip‘ => ‘true‘,
										‘http_follow_302‘ => ‘true‘,
										‘http_cookie‘ => ‘‘,
										‘http_ua‘ => ‘‘,
										‘http_host‘ => ‘‘,
										‘http_referer‘ => ‘‘,
										‘http_limit_rate‘ => ‘‘, 
										]);
    return $response->content;  ##包含任务id 以及创建任务的返回码 ,0为成功
}

sub get_task_re {         ##获取探测结果
    my ($task_id) = @_;
    my $UA = LWP::UserAgent->new;
	$UA->agent(‘Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0‘);
	$UA->cookie_jar({‘file‘ => ‘./ali_cookies.dat‘});
	$UA->default_header(
						‘Host‘ => ‘www.alibench.com‘,
						‘User-Agent‘ => ‘Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0‘,
						‘Accept‘ => ‘application/json, text/javascript, */*; q=0.01‘,
						‘Accept-Language‘ => ‘zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3‘,
						‘Accept-Encoding‘ => ‘gzip, deflate‘,
						‘Content-Type‘ => ‘application/x-www-form-urlencoded; charset=UTF-8‘,
						‘X-Requested-With‘ => ‘XMLHttpRequest‘,
						‘Referer‘ => "http://www.alibench.com/rp/$task_id",
						‘Connection‘ => ‘keep-alive‘,
						‘Pragma‘ => ‘no-cache‘,
						‘Cache-Contro‘ => ‘no-cache‘,
	);
    my $response = $UA->post("$get_task_re_url",[
											‘task_ids‘ => "$task_id", 
											‘task_type‘=> ‘1‘,
										]);
    return $response->content;
}

sub handle_json {   ###json处理
	my $json_data = $_[0];
	my $json_obj;
	my $json = JSON->new->utf8;
	$json_obj = $json->decode("$json_data");

	my ($data_array,$tmp,$complete_status);
	my @data_item = qw!http_total_time http_dns_time curl_connect_time http_download_speed client_ip node_name!;
	###定义需要获取的数据类型,以下是可以得到的信息,在数组data_item添加即可
#	                {
#                    "node_id": "10658334",
#                    "locate_id": 34147844,
#                    "task_type": "1",
#                    "target_ip": "123.134.186.225",
#                    "http_response_code": "200",
#                    "http_total_time": 296000,
#                    "http_dns_time": 15000,
#                    "curl_connect_time": 62000,
#                    "curl_pretransfer_time": 62000,
#                    "curl_starttransfer_time": 140000,
#                    "http_download_size": "36590",
#                    "http_download_speed": "123614",
#                    "http_response_head": "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nLast-Modified: Wed, 04 Feb 2015 08:55:16 GMT\r\nVary: Accept-Encoding\r\nExpires: Wed, 04 Feb 2015 09:08:23 GMT\r\nCache-Control: max-age=300\r\nContent-Encoding: gzip\r\nContent-Length: 36590\r\nAccept-Ranges: bytes\r\nDate: Wed, 04 Feb 2015 09:05:33 \r\nServer: wxcdn/1.1.1\r\n\r\n",
#                    "ldns_ip": "58.242.96.242",
#                    "http_download_time": 234000,
#                    "http_connect_time": 47000,
#                    "status": 2,
#                    "client_ip": "58.243.174.211",
#                    "node_name": "安徽 阜阳 联通",
#                    "node_country": "中国",
#                    "node_province": "安徽",
#                    "node_city": "阜阳",
#                    "isp": "联通",
#                    "target_location": "山东省莱芜市联通"
#                }

	for my $item (@{$json_obj->{‘data‘}}){
		$data_array = $item->{‘data‘};
		$complete_status = $item->{‘complete‘};   #true:1   false:0
	}

	foreach my $one_zone_info (@{$data_array}) {
		if (defined($one_zone_info->{‘http_total_time‘})) {
			foreach my $da_it (@data_item) {
				$tmp .=  $one_zone_info->{"$da_it"} . "_";
			}
			push (@result,$tmp);   #将探测完成的数据push到数组
			$tmp = ‘‘;
		}else{
			print "$one_zone_info->{‘node_name‘}   this zone is not ok \n"; 
			next;
		}
	}
	return($complete_status,@result);
}

my ($traceroute_from,$traceroute_from_name) = save_cookie;
my $task_info = create_task($traceroute_from,$traceroute_from_name);

my $task_id;
if ($task_info =~ m!\{"code":0,"env":"online","data":"\\/rp\\/(.*)"\}!) {
	$task_id = $1;
}else{
	print "Create task failed \n $task_info";
	exit;
}

sleep 20;
print "get \n";
my ($complete_status,@result);
($complete_status,@result) = handle_json(get_task_re($task_id));

while ($complete_status == 0) {
	sleep 2;
	print "get result,waiting \n";
	($complete_status,@result) = handle_json(get_task_re($task_id));
}

foreach  (@result) {
	print "$_ \n";  ##输出全部的数据
}

下图是获取的部分结果。  注意下执行频率,过快的话 可能会导致测试的域名被拉黑名单。

时间: 2024-11-03 12:57:22

alibench交互 获取测试链接全国打开情况的相关文章

「实例操作」抓取耐克中国官网数据转淘宝数据包-1 获取商品链接

最近接了个单子,要抓耐克中国的数据,把里面的商品转化成淘宝数据包,可以直接上传宝贝 客户提出了3个要求: 1:批量下载全网站商品: 2:定期更新网站新品: 3:批量更新淘宝库存,检查网站数据 这边先确定思路 第一是要抓取这些商品的列表, 第二是抓取单品的信息, 第三是把信息按照淘宝数据包格式输出. 这样就解决了第一个要求, 第二个邀请是抓取新品,这个要求可以这样理解,定期抓取所以链接,并保存下来,如果有的新的链接,那就是新品, 第三个要求更新库存,这个要有淘宝接口,我朋友那边有,借用下即可 ==

连接字符串中Min Pool Size的理解是错误,超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

Min Pool Size的理解是错误的 假设我们在一个ASP.NET应用程序的连接字符串中将Min Pool Size设置为30: <add name="cnblogs" connectionString="Data Source=.;Initial Catalog=cnblogs;Min Pool Size=30" providerName="System.Data.SqlClient"/> 访问一下应用程序,然后用Windows

超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置 参考数据库链接串: <add key="data" value="server=192.168.1.123; Port=3306; uid=root; pwd=root;database=data;pooling=true;min pool size=5;max pool size=512;connect timeout = 20; "/> 查看应用程

超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

我在玩webservice中遇到这个问题,情况是:(.net4.0)之前用的是好的,更新系统后出错.vs运行是好的,IIS运行出错..net底层抛错.换成.net2.0后完美运行.所以.net4.0出问题. ========================================================================================================= (转) 问题解决方法: 解决办法 1.在代码里面,把未关闭的连接关闭 2.扩大共

爬虫技术(六)-- 使用HtmlAgilityPack获取页面链接(附c#代码及插件下载)

菜鸟HtmlAgilityPack初体验...弱弱的代码... Html Agility Pack是一个开源项目,为网页提供了标准的DOM API和XPath导航.使用WebBrowser和HttpWebRequest下载的网页可以用Html Agility Pack来解析. HtmlAgilityPack的文档是CHM格式的,有时会无法正常阅读CHM格式的文件.如果是IE不能链接到您请求的网页或者打开后"页面无法显示".请在要打开的CHM文件上右击属性,会在底下属性多了个"

[转]超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

超时时间已到.超时时间已到,但是尚未从池中获取连接.出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小. 解决办法:首先要做的是在我们使用连接后立即关闭连接.如果没有关闭连接那么连接将保存到连接池中知道GC来销毁.这种情况下你以为连接池没有到达最大值但实际上连接池已经到达了最大值 其次我们可以通过连接字符串中的Max Pool Size = N;来动态扩大连接池中的连接最大数量. 说明: 也就是在connectionString中如果未指定max pool size的值,则max p

【转】时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

超时时间已到.超时时间已到,但是尚未从池中获取连接.出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小. 解决办法1.在代码里面,把未关闭的连接关闭2.扩大共享池,方法如下:解决方法可以是修改连接池的连接生存期,因为默认值是60秒,即连接从应用程序被释放后可以在池中保存的时间.具体操作步骤如下:如果是ODBC的话,则可以在ODBC Data Source Administrator中手动更改,该程序位于“Start”菜单中的“Programs”->\"Adminstrative

20.获取测试对象的属性及内容

场景 获取测试对象的内容是前端自动化测试里一定会使用到的技术.比如我们要判断页面上是否显示了一个提示,那么我们就需要找到这个提示对象,然后获取其中的文字,再跟我们的预期进行比较.在webdriver中使用element.attribute()方法可以获取dom元素(测试对象)的属性. 获取测试对象的属性能够帮我们更好的进行对象的定位.比如页面上有很多class都是'btn'的div,而我们需要定位其中1个有具有title属性的div.由于selenium-webdriver是不支持直接使用tit

织梦列表页获取当前链接和当前分页链接

织梦列表页获取当前链接和当前分页链接 功能描述 兼容静态 动态 伪静态 支持第一页直接是栏目链接,第二页,第三页....按当前分页 支持在开启绝对路径和没开启绝对路径不同输出 实现教程 1.打开 include/arc.listview.class.php 找到 else if($PageNo!=1 && $ctag->GetName()=='field' && $ctag->GetAtt('display')!='') 在它的上面加入 else if($cta