通过curl的并发机制实现php批量网络请求
2015-09-09 17:45
726 查看
应用场景:有一批玩家的ip地址,需要转换为国家信息
应用思路:简单通过网站的公共服务接口查询ip对应的国家信息,但是服务没有批量接口
解决方案:既然对方没有批量接口,那只能本地批量调用对方的接口,简单的方法,通过curl的批处理机制实现
代码如下:
备注:这个网址有频率限制,访问太频繁会被直接屏蔽
应用思路:简单通过网站的公共服务接口查询ip对应的国家信息,但是服务没有批量接口
解决方案:既然对方没有批量接口,那只能本地批量调用对方的接口,简单的方法,通过curl的批处理机制实现
代码如下:
<?php $ip_list_str = file_get_contents("./ip_list_tmp.txt"); $ip_list = explode("\n", $ip_list_str); $mh = curl_multi_init(); foreach($ip_list as $ip) { $url = "http://www.geoplugin.net/json.gp?ip=".$ip; $conn[$ip] = curl_init(); curl_setopt ( $conn[$ip] , CURLOPT_URL, $url); curl_setopt ( $conn[$ip] , CURLOPT_HEADER , 0 ) ; curl_setopt ( $conn[$ip], CURLOPT_CONNECTTIMEOUT,60); curl_setopt ( $conn[$ip], CURLOPT_RETURNTRANSFER,true); curl_multi_add_handle ($mh, $conn[$ip]); } do { curl_multi_exec($mh,$active); } while ($active); foreach($ip_list as $ip) { $data = curl_multi_getcontent($conn[$ip]); $country_info = json_decode($data, true); var_dump($country_info); } foreach($ip_list as $ip) { curl_multi_remove_handle($mh,$conn[$ip]); curl_close($conn[$ip]); } curl_multi_close($mh); ?>
备注:这个网址有频率限制,访问太频繁会被直接屏蔽
相关文章推荐
- 为ElasticSearch添加HTTP基本认证
- 处理“System.Web.HttpException: 超过了最大请求长度”
- HTTP协议
- Linux httpd 跳转简单方法一
- Servlet是如何工作的?
- http请求No peer certificate的解决方法
- 用wireshark查看 tcpdump 抓取的mysql交互数据
- HTTP协议传输数据,大小有上限吗?
- Http状态码大全(200、404、500等)
- 几种神经网络的简单区别和适用范围
- HTTP常见状态码 200 301 302 404 500
- 僵尸进程 http://ar.newsmth.net/thread-8a428b73045f6.html
- [转]网络性能评估工具Iperf详解(可测丢包率)
- IOS_UI_网络数据请求
- 数字签名是什么?
- Android网络通信请求框架——Volley
- 解析ajax核心XMLHTTPRequest对象的创建与浏览器的兼容问题
- mini-httpd源码分析-mini-httpd.c
- TCP与UDP区别
- Linux 网络配置