ip地址api第三方jsonp接口整理

 更新时间:2016年11月25日 15:42  点击:1943
这里我整理了一些常用的ip地址api第三方jsonp接口了,像淘宝的这里就找到了,如果有找到的朋友在下面留方加上,我将补充上来。

腾讯IP地址查询接口:http://fw.qq.com/ipaddress
新浪IP地址查询接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js
搜狐IP地址查询接口:http://pv.sohu.com/cityjson
谷歌IP地址查询接口:http://j.maxmind.com/app/geoip.js
有道IP地址查询接口:http://www.youdao.com/smartresult-xml/search.s
1616 IP地址查询接口:http://w.1616.net/chaxun/iptolocal.php
126 http://ip.ws.126.net/ipquery
hao123 http://app.hao123.com/ipquery/getcity.php?rtype=2

下面我看一下测试腾讯IP地址aip

腾讯的IP地址API接口地址:http://fw.qq.com/ipaddress

返回的是数据格式为:

 代码如下 复制代码

var IPData = new Array(“58.218.198.205″,”",”江苏省”,”徐州市”);

使用JS代码进行调取:

 代码如下 复制代码

<script language="javascript" type="text/javascript" src="http://fw.qq.com/ipaddress"></script>
<script>document.write("你的IP是:"+IPData[0]+",来自:"+IPData[2]);</script>

新浪IP地址查询接口返回的为

 代码如下 复制代码

var remote_ip_info = {"ret":1,"start":"123.68.0.0","end":"123.68.195.255","country":"u4e2du56fd","province":"u6e56u5357","city":"u957fu6c99","district":"","isp":"u94c1u901a","type":"","desc":""};

搜狐IP地址查询接口

 代码如下 复制代码

var returnCitySN = {"cip": "123.68.122.147", "cid": "430000", "cname": "湖南省"};

好了其它的我就不介绍了大家自行操作吧。

中文处理在php中处理总是不那么完美经常会碰到中文处理时乱码或为空问题,下面我在处理json时也碰到同样的问题,后来整理一个完美解决 json_encode 中文乱码或为空程序类。
 代码如下 复制代码

/**************************************************************
    *
    * 使用特定function对数组中所有元素做处理
    * @param string &$array 要处理的字符串
    * @param string $function 要执行的函数
    * @return boolean $apply_to_keys_also 是否也应用到key上
    * @access public
    *
    *************************************************************/
    function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
    {
    static $recursive_counter = 0;
    if (++$recursive_counter > 1000) {
    die('possible deep recursion attack');
    }
    foreach ($array as $key => $value) {
    if (is_array($value)) {
    arrayRecursive($array[$key], $function, $apply_to_keys_also);
    } else {
    $array[$key] = $function($value);
    }
    if ($apply_to_keys_also && is_string($key)) {
    $new_key = $function($key);
    if ($new_key != $key) {
    $array[$new_key] = $array[$key];
    unset($array[$key]);
    }
    }
    }
    $recursive_counter--;
    }
    /**************************************************************
    *
    * 将数组转换为JSON字符串(兼容中文)
    * @param array $array 要转换的数组
    * @return string 转换得到的json字符串
    * @access public
    *
    *************************************************************/
    function JSON($array) {
    arrayRecursive($array, 'urlencode', true);
    $json = json_encode($array);
    return urldecode($json);
    }
    
    $array = array
    (
    'Name'=>'络恩',
    'Age'=>24
    );
    
    
    echo JSON($array);
ip黑名单实现方法是先把要过滤的IP放在一个txt文件或数据库中,然后当我们访问时获取我们的IP地址然后进行遍历对比即可实现了。


学校的新闻系统要求有些新闻只开放校内ip浏览,于是重写了一个代码来实现此功能,实现后的结果是,只要把允许访问的ip列入ip.txt这个文件中即可,同时支持c类ip,例如:

ip.txt
192.168
211.67.188
211.67.191.25
代码如下:

 代码如下 复制代码

/*
* ip地址黑名单、白名单
* 判断访客地址的ip是否在ip.txt中,支持c类ip
* By xhat
*/

$ip = $_SERVER['REMOTE_ADDR'];
$ipArray = preg_replace("#rn?|n#","",file('ip.txt'));
foreach ($ipArray as $ipTest) {
if (substr_count($ip, $ipTest) != "0") {
echo "ok"; //执行相关命令
die();
}
}

?>

上面大家可以使用代码来骗过了,下面代码进行升级

 代码如下 复制代码

<?php
class block_ip {
var $Block_ip = array("192.168.1.1","210.10.2.1-20","222.34.4.*");
function __construct(){
}
function __destruct(){
}
private function makePregIP($str){
if (strstr($str,"-")) {
$aIP = explode(".",$str);
foreach ($aIP as $k=>$v) {
if (!strstr($v,"-")) {
$preg_limit .= makePregIP($v);
} else{
$aipNum = explode("-",$v);
for($i=$aipNum[0];$i<=$aipNum[1];$i++){
$preg .=$preg?"|".$i:"[".$i;
}
$preg_limit .=strrpos($preg_limit,".",1)==(strlen($preg_limit)-1)?$preg."]":".".$preg."]";
}
}
}else{
$preg_limit .= $str.".";
}
return $preg_limit;
}
private function getAllBlockIP(){
if ($this->Block_ip) {
foreach ($this->Block_ip as $k=>$v) {
$ipaddres = $this->makePregIP($v->start_ip);
$ip = str_ireplace(".",".",$ipaddres);
$ip = str_replace("*","[0-9]{1,3}",$ip);
$ipaddres = "/".$ip."/";
$ip_list[] = $ipaddres;
}
}
return $ip_list;
}
public function checkIP() {
$iptable = $this->getAllBlockIP();
$IsJoined = true;
//取得用户ip
$Ip = $this->get_client_ip();
$Ip = trim($Ip);
//剔除黑名单中的IP区段
if ($iptable) {
foreach($iptable as $value) {
if (preg_match("{$value}",$Ip)) {
$IsJoined = false;
break;
}
}
}
// www.111cn.net如果在ip黑名单中就执行如下操作
if( !$IsJoined ){
echo "IP Error";
exit;
}
}
private function get_client_ip(){
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");
else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");
else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip = $_SERVER['REMOTE_ADDR'];
else
$ip = "unknown";
return($ip);
}
}
?>

引用片段:

 代码如下 复制代码

$oBlock_ip = new block_ip();
$oBlock_ip->checkIP();

在php中要下载图片的第一步我需要利用正则来采集字符串中的图片地址,然后再利用php相关函数把图片直接读取并保存到本地服务器即实现了图片批量下载了。

最近一直很忙,遇到一个手工活,需要下载一些远程的图片,一共一百多张,如果通过手工一张一张的保存,也太耗费时间了,于是上网google了一把,找到PHP批量下载图片文件的方法,原文是出自平凡世界博客的一片关于如何使用PHP批量下载CSS文件中的图片的文章。经过研究改写了一下就可以使用了,方便快捷多了。

PHP批量下载图片文件代码:

 代码如下 复制代码

set_time_limit(0);//设置PHP超时时间
$imagesURLArray = array_unique($imagesURLArray );

foreach($imagesURLArray as $imagesURL) {
    echo $imagesURL;
    echo "
";
    file_put_contents(basename($imagesURL), file_get_contents($imagesURL));
}

原理很简单,通过一个含有图片地址的数组循环,然后使用PHP的file_get_contents函数取得图片,在使用file_put_contents函数把图片保存下来。
P.S:一定要加上设置PHP超时时间哦~!

附上原文中通过php下载css中图片的代码:

 代码如下 复制代码

< ?php
/*
More & Original PHP Framwork
Copyright (c) 2007 - 2008 IsMole Inc.
Author: kimi
Documentation: 下载样式文件中的图片,水水专用扒皮工具
*/

//note 设置PHP超时时间
set_time_limit(0);

//note 取得样式文件内容
$styleFileContent = file_get_contents('images/style.css');

//note 匹配出需要下载的URL地址
preg_match_all("/url((.*))/", $styleFileContent, $imagesURLArray);

//note 循环需要下载的地址,逐个下载
$imagesURLArray = array_unique($imagesURLArray[1]);
    foreach($imagesURLArray as $imagesURL) {
    file_put_contents(basename($imagesURL), file_get_contents($imagesURL));
}


后来又找到一个php批量下载图片文件

假如现在我现在发现一个网站上的图片保存方式是1001 – 1999目录下都存放着从1开始(数量不等)的.jpg图片,现在我决定用php的方法将图片按照自己需要的样式直接下载到本地

假如图片开始地址为:http://image.xxx.com/img/1001/1.jpg
这时我将1001处放到变量$id,1.jpg放到变量$num.jpg,保存的文件名为$id_$num.jpg
首先确保在此文件执行目录下面建一个名为img的并且可写的文件夹

 代码如下 复制代码
<?php
$id= isset($_GET['id']) && intval($_GET['id']) && $_GET['id']>1000 ? $_GET['id'] : 1001;
$num= isset($_GET['num']) && intval($_GET['num']) ? $_GET['num'] : 1;
$url="http://image.xxx.com/img/{$id}/{$num}.jpg";
 
$array=get_headers($url,1);
 
//通过返回200和400来判断是增加$id或者$num
if(preg_match('/200/',$array[0])){
 $new_url="?id={$id}&num=".($num+1);
 
 ob_start();
 readfile($url);
 $img = ob_get_contents();
 ob_end_clean();
 
 $filename="./img/{$id}_{$num}.jpg";
 $f=fopen($filename,'a');
 fwrite($f,$img);
 fclose($f);
}else{
 $new_url="?id=".($id+1)."&num=1";
}
if($id > 1999) exit('全部完成');
//显示当前的状态
echo $url,' - ',$array[0],'<script>location.href="'.$new_url.'";</script>';
文章给大家整理两个PHP多线程了,一个是模仿java的多线程了,另一个是使用了curl实现多线程序采集图片了,下面我们一起来看看。

通过WEB服务器来实现PHP多线程功能。

当然,对多线程有深入理解的人都知道通过WEB服务器实现的多线程只能模仿多线程的一些效果,并不是真正意义上的多线程。

但不管怎么样,它还是能满足我们的一些需要的,在需要类似多线程的功能方面还是可以采用这个类。

 代码如下 复制代码

 

    /**
    * @title: PHP多线程类(Thread)
    * @version: 1.0
    * @author: phper.org.cn < web@phper.org.cn >
    * @published: 2010-11-2
    *
    * PHP多线程应用示例:
    * require_once 'thread.class.php';
    * $thread = new thread();
    * $thread->addthread('action_log','a');
    * $thread->addthread('action_log','b');
    * $thread->addthread('action_log','c');
    * $thread->runthread();
    *
    * function action_log($info) {
    * $log = 'log/' . microtime() . '.log';
    * $txt = $info . "rnrn" . 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn";
    * $fp = fopen($log, 'w');
    * fwrite($fp, $txt);
    * fclose($fp);
    * }
    */
    class thread {
    var $hooks = array();
    var $args = array();
    function thread() {
    }
    function addthread($func)
    {
    $args = array_slice(func_get_args(), 1);
    $this->hooks[] = $func;
    $this->args[] = $args;
    return true;
    }
    function runthread()
    {
    if(isset($_GET['flag']))
    {
    $flag = intval($_GET['flag']);
    }
    if($flag || $flag === 0)
    {
    call_user_func_array($this->hooks[$flag], $this->args[$flag]);
    }
    else
    {
    for($i = 0, $size = count($this->hooks); $i < $size; $i++)
    {
    $fp=fsockopen($_SERVER['HTTP_HOST'],$_SERVER['SERVER_PORT']);
    if($fp)
    {
    $out = "GET {$_SERVER['PHP_SELF']}?flag=$i HTTP/1.1rn";
    $out .= "Host: {$_SERVER['HTTP_HOST']}rn";
    $out .= "Connection: Closernrn";
    fputs($fp,$out);
    fclose($fp);
    }
    }
    }
    }
    }


使用方法:

 代码如下 复制代码

    $thread = new thread();
    
    $thread->addthread('func1','info1');
    
    $thread->addthread('func2','info2');
    
    $thread->addthread('func3','info3');
    
    $thread->runthread();


说明:

addthread() 是添加线程函数,第一个参数是函数名,之后的参数(可选)为传递给指定函数的参数。

runthread() 是执行线程的函数。

例2.利用curl实现多线程下载图片

其实是php利用curl实现的一个多线程类),有了这个类,我们也可利用该类执行多线程任务了!

 代码如下 复制代码

 

    <?php
    class curl_multi{
        private $url_list=array();
        private $curl_setopt=array(
            'CURLOPT_RETURNTRANSFER' => 1,//结果返回给变量
            'CURLOPT_HEADER' => 0,//是否需要返回HTTP头
            'CURLOPT_NOBODY' => 0,//是否需要返回的内容
            'CURLOPT_FOLLOWLOCATION' => 0,//自动跟踪
            'CURLOPT_TIMEOUT' => 6//超时时间(s)
        );
        function __construct($seconds=30){
            set_time_limit($seconds);
        }
        /*
         * 设置网址
         * @list 数组
         */
        public function setUrlList($list=array()){
            $this->url_list=$list;
        }
        /*
         * 设置参数
         * @cutPot array
         */
        public function setOpt($cutPot){
            $this->curl_setopt=$cutPot+$this->curl_setopt;
        }
        /*
         * 执行
         * @return array
         */
        public function execute(){
            $mh=curl_multi_init();
            foreach($this->url_list as $i=>$url){
                $conn[$i]=curl_init($url);
                foreach($this->curl_setopt as $key => $val){
                    curl_setopt($conn[$i],preg_replace('/(CURLOPT_w{1,})/ie','$0',$key),$val);
                }
                curl_multi_add_handle($mh,$conn[$i]);
            }
            $active=false;
            do{
                $mrc=curl_multi_exec($mh,$active);
            }while($mrc == CURLM_CALL_MULTI_PERFORM);
    
            while($active and $mrc == CURLM_OK){
                if(curl_multi_select($mh) != -1){
                    do{
                        $mrc=curl_multi_exec($mh,$active);
                    }while($mrc == CURLM_CALL_MULTI_PERFORM);
                }
            }
            $res=array();
            foreach($this->url_list as $i => $url){
                $res[$i]=curl_multi_getcontent($conn[$i]);
                curl_close($conn[$i]);
                curl_multi_remove_handle($mh,$conn[$i]);//释放资源  
            }
            curl_multi_close($mh);
            return $res;
        }
    }

php使用多线程下载类示例:下载远程图片

 代码如下 复制代码


    $curl_mul=new curl_multi();
    $curl_mul->setUrlList(array('http://www.111cn.net/img/logo.jpg','http://www.111cn.net/img/logo.jpg','http://www.111cn.net/img/logo.jpg'));
    $a=$curl_mul->execute();
    $i=1;
    foreach($a as $v){
        $filename=$i.'.gif';
        $fp2=@fopen($filename,'a');
        fwrite($fp2,$v);
        fclose($fp2);
        $i++;
    }

[!--infotagslink--]

相关文章

  • Bootstrap Table使用整理(二)

    这篇文章主要介绍了Bootstrap Table使用整理(二)的相关资料,需要的朋友可以参考下...2017-06-15
  • c#获取本机的IP地址的代码

    c#获取本机的IP地址的代码,需要的朋友可以参考一下...2020-06-25
  • 微信小程序实现选择地址省市区三级联动

    这篇文章主要为大家详细介绍了微信小程序实现选择地址省市区三级联动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-21
  • C#实现获取MAC地址的方法

    这篇文章主要介绍了C#实现获取MAC地址的方法,很实用的功能,需要的朋友可以参考下...2020-06-25
  • file_put_contents并发性问题解决方案整理

    在使用file_put_contents时会碰到并发性问题了,对于这个问题我们有多种解决方案了,其实锁是小编比较喜欢的解决办法了,当然也有其它办法,具体如下。 解决 办法一,fil...2016-11-25
  • Microsoft Expression Web 简体中文正式版 官方下载地址

    Microsoft Expression Web 简体中文正式版相对于早期的 Microsoft Expression Web Designer CTP1(英文)除了它是正式的中文版外,有进步的地方1.对标签的id名称加上了css的代...2020-06-25
  • PHP JS Ip地址及域名格式检测代码

    PHP IP地址格式检测函数复制代码 代码如下:function checkIp($ip){ $ip = str_replace(" ", "", $ip); $ip = strtolower($ip); $ip= str_replace("http://", "", $ip); $ip= str_replace("https://", ""...2013-10-04
  • C#获取路由器外网IP,MAC地址的实现代码

    这篇文章主要介绍了C#获取路由器外网IP,MAC地址的实现代码,需要的朋友可以参考下...2020-06-25
  • php判断邮箱地址是否存在的方法

    这篇文章主要介绍了php判断邮箱地址是否存在的方法,php判断邮箱地址是否存在的方法有两种,感兴趣的朋友可以参考一下...2016-02-18
  • C# URL短地址压缩算法及短网址原理解析

    这篇文章主要介绍了C# URL短地址压缩算法及短网址原理解析,本文重点给出了算法代码,需要的朋友可以参考下...2020-06-25
  • 解决使用了nginx获取IP地址都是127.0.0.1 的问题

    这篇文章主要介绍了解决使用了nginx获取IP地址都是127.0.0.1 的问题,获取i工具的完整代码文中给大家提到,具体实例代码跟随小编一起看看吧...2021-09-18
  • php获取当前url地址的方法介绍

    这篇文章介绍了php获取当前url地址的方法小结,有兴趣的同学可以参考一下 本文实例讲述了php获取当前url地址的方法。分享给大家供大家参考,具体如下: js 获取: ...2017-01-22
  • 整理的7款常用的开源免费的Android UI组件及官方下载地址

    Android开发技术日趋成熟,开源社区也涌现了很多开源UI项目,以下是笔者整理的7款Android开发者常用的Android UI组件及官方下载地址。 Android开发是目前最热门的移...2016-09-20
  • php中匹配邮箱地址正则表达式

    一篇php中匹配邮箱地址正则表达式实例,邮箱地址替换正则我常用的正则匹配表达式:/^[a-z]([a-z0-9]*[-_]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\\.][a-z]{2,3}([\\....2016-11-25
  • php 获得用户的真实IP地址

    一个段经典的代码可以用来获取用户的真实IP地址,包括可以是内网或是外网,有需要的朋友可以参考一下。 代码如下 复制代码 /** * 获得用户的...2016-11-25
  • 获取当前页面的url地址php代码

    获取当前页面的url地址php代码,第一款是一款获取无参数URL第二款是获取完整URL函数哦,如果你正找url参数的代码哦。 代码如下 复制代码 <?php...2016-11-25
  • 在VMware虚拟机中查看Linux的IP地址的方法

    这篇文章主要介绍了在VMware虚拟机中查看Linux的IP地址的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-16
  • php正则获取文章内容中图片地址例子

    正则提取图片中的地址我们介绍过很多的相关文章了,下面再来给各位介绍一个可以提取内容中第一张图片的例子,希望对各位有帮助。 代码如下 复制代码 ...2016-11-25
  • 采集远程图片图片并且替换图片地址代码

    现在用php采集远程图片是很简单的事情,但是我们要把采集过来的数据进行过滤,这恐怕得用到正则表达式了,下面的程序是采集远程图片图片并且替换图片地址代码。 $dir_...2016-11-25
  • c#判断email地址是否为合法

    输入email地址使用c#语言检测出email地址是否是合法的,这篇文章主要介绍了c#判断email地址是否为合法的相关资料,需要的朋友可以参考下...2020-06-25