国内大型网站提供的 IP API接口调用方法

本文详细介绍了如何使用搜狐等国内门户提供的IPAPI接口,并指出使用时可能遇到的问题,如返回类型不正确导致使用失败。同时提供了其他几大门户网站的IPAPI接口地址,并分享了自行筛选IP地址的方法。

今天群里有人问到 IP API 的调用方法,他说一些实用的jQuery代码片段中的 jQuery得到用户IP 不起作用。我查看了下,调用没有问题,于是想到应该是 GWF 干的好事。如我上网经常在墙外,调用结果如下:


关于这个不多说了,越说越气愤。我们看看如何使用国内几个门户网站提供的 IP API 的使用方法,我个人不喜欢腾讯提供的,它使用的是gb2312编码,这里仅以搜狐提供的 IP API 说明下。使用时,可先将地址拷贝到浏览器中看下返回结果,在进行合理的调用。如调用搜狐提供的 IP API 方法如下:

<script type="text/javascript" src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
<script>
    var result = returnCitySN;
    var city = returnCitySN.cname;
</script> 

结果如下:


群里朋友使用时不注意返回类型,从而使用getJSON来获取结果,导致失败。以下是几大门户网站提供的 IP API 地址:

  • 腾讯的IP地址API接口地址:http://fw.qq.com/ipaddress
  • 新浪的IP地址查询接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js
  • 新浪多地域测试方法:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=219.242.98.111
  • 搜狐IP地址查询接口(默认GBK):http://pv.sohu.com/cityjson
  • 搜狐IP地址查询接口(可设置编码):http://pv.sohu.com/cityjson?ie=utf-8
  • 搜狐另外的IP地址查询接口:http://txt.go.sohu.com/ip/soip
  • 淘宝的IP接口地址: http://ip.taobao.com/instructions.php 
  • 还有一个 API比较全面 
    http://whois.pconline.com.cn 这个很强大 也比较详细 
    但是这个有问题 他JSON格式 属于回调 
另外收费的API接口地址:
百度的API:http://apistore.baidu.com/apiworks/servicedetail/114.html
国外IPAPI:http://www.ip-api.com/
91查API:http://www.91cha.com/api/ip.html
民间Ip:http://xn--ip-im8ckc.com/
中国IP地址信息查询系统: http://cnisp.org/

另外自己也可以编写程序自己筛选ip地址
方法一:利用apnic获取准确的IP地址
 http://blog.sina.com.cn/s/blog_495161310100js5t.html
方法二:配置GeoIP和纯真IP库显示IP地理位置信息
http://blog.hackroad.com/operations-engineer/linux_server/3331.html
其他IP段查询:http://ips.chacuo.net/view/s_SC

作者:天府云创
除非注明,文章均为原创,转载时必须以链接形式标明本文地址。
本文地址: http://blog.csdn.net/enweitech
<think>好的,用户想了解如何记录和查看API接口调用的日志。首先,我需要回忆之前提供的引用内容,特别是引用3,里面提到了在调用接口前后打印日志,捕获异常,记录入参和出参。这些都是关键点。 用户的问题分为两部分:记录和查看日志。先从记录开始。根据引用3中的例子,应该在调用API接口的前后使用日志记录入参和出参,这样可以方便排查问题。例如在Java中使用try-catch块,在调用前后用log.info记录,异常时用log.error记录错误信息。同时,还要注意捕获Throwable而不仅仅是Exception,确保所有错误都能被捕获。 接下来是日志存储和查看。用户可能需要将日志持久化,比如存入文件或数据库。引用1提到调用userInterfaceInfoService.save将记录保存到数据库,这可以用于记录每次调用的详细信息。另外,引用2提到API调用是通过发送请求到特定URL,所以可能需要记录请求的URL、参数、响应状态码等。 然后,关于查看日志,需要考虑日志管理系统,比如ELK(Elasticsearch, Logstash, Kibana)或者云服务提供的日志功能。实时监控和报警也是重要部分,可以在系统出现大量错误时及时通知开发人员。 可能还需要考虑日志的格式化和分类,比如按服务模块或接口名称分类,方便过滤和查找。同时,高并发下的日志处理要注意性能,避免日志记录成为瓶颈,可以采用异步写入或批量写入的方式。 用户可能需要具体的实现步骤或代码示例。例如在Java中使用AOP统一处理日志,或者在Python中使用装饰器记录接口调用。此外,日志的轮转和归档策略也很重要,防止日志文件过大。 最后,生成相关问题时,要覆盖日志记录的最佳实践、工具推荐、性能优化、错误排查方法等,帮助用户全面了解如何处理API接口的日志。</think>### 如何记录和查看API接口调用的日志 #### 一、日志记录的核心要素 1. **基础信息捕获** - 调用时间戳:`System.currentTimeMillis()` - 接口名称:如`/api/weather` - 请求唯一标识:UUID或雪花算法生成 - 客户端IP和服务端IP 2. **入参/出参记录** 在调用前后分别记录请求参数和响应结果,示例如下: ```java log.info("调用开始 | 接口={} 入参={}", "userService.test", JSON.toJSONString(params)); Response res = apiService.call(params); log.info("调用结束 | 接口={} 耗时={}ms 出参={}", "userService.test", System.currentTimeMillis()-startTime, res.getCode()); ``` 3. **异常处理标准化** 使用`try-catch`捕获`Throwable`并记录堆栈信息: ```python try: response = requests.post(url, json=data) response.raise_for_status() except Exception as e: logger.error(f"API调用异常 | URL={url} 错误={str(e)} 堆栈={traceback.format_exc()}") ``` #### 二、存储方案对比 | 存储方式 | 优点 | 缺点 | 适用场景 | |---------|------|------|---------| | 文件存储 | 实现简单,无需额外依赖 | 检索效率低,难做统计分析 | 低频调用场景 | | 数据库 | 支持复杂查询,可持久化 | 高频写入可能成为性能瓶颈 | 需要审计功能的系统 | | ELK栈 | 支持全文检索,可视化分析 | 需要维护ES集群 | 中大型分布式系统 | | 日志服务(如AWS CloudWatch) | 免运维,自动扩展 | 产生云服务费用 | 云原生架构 | #### 三、实现方案示例(Java Spring Boot) 1. **AOP切面统一处理** ```java @Aspect @Component public class ApiLogAspect { @Around("execution(* com.example.api.*.*(..))") public Object logApiCall(ProceedingJoinPoint pjp) throws Throwable { long start = System.currentTimeMillis(); Object[] args = pjp.getArgs(); try { Object result = pjp.proceed(); log.info("调用成功 | 方法={} 耗时={}ms 出参={}", pjp.getSignature().getName(), System.currentTimeMillis()-start, result); return result; } catch (Throwable t) { log.error("调用异常 | 方法={} 入参={} 错误={}", pjp.getSignature().getName(), Arrays.toString(args), t.getMessage()); throw t; } } } ``` 2. **异步日志写入优化** 使用Disruptor或Log4j2异步Appender提升性能: ```xml <!-- log4j2.xml配置 --> <AsyncLogger name="ApiLogger" level="info"> <AppenderRef ref="KafkaAppender"/> </AsyncLogger> ``` #### 四、日志分析实践 1. **错误模式识别** ```bash # 使用ELK的Kibana进行聚合分析 GET /logs-*/_search { "aggs": { "error_codes": { "terms": { "field": "response_code" } } } } ``` 2. **调用链路追踪** 集成SkyWalking或Zipkin实现跨服务追踪: ``` [2023-09-01 12:00:00] TraceID:abc-123 - ServiceA (10ms) ├─ ServiceB (8ms) └─ Database (2ms) ``` #### 五、安全注意事项 1. 敏感数据脱敏处理 ```java public String maskSensitiveData(String original) { return original.replaceAll("(\"password\":\")(.*?)(\")", "$1***$3"); } ``` 2. 日志访问权限控制 - 数据库日志表设置`SELECT`权限限制 - 文件日志设置`600`权限(仅属主可读写)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值