判断url链接是否有效的几种方法

前提

需要判断远程URL是否有效,远程url包括远程图片,网页,视频等等元素

解决办法:


使用PHP解决
  1. 使用file_get_contents函数,不过优缺点如果url无法访问,会出现终止程序问题
  2. 使用curl返回,然后判断是否正确执行
  3. 使用get_headers函数,根据HTTP返回值查看是否有200

使用js解决:
  1. 使用原生的js函数ActiveXObject,仅支持ie内核的浏览器
  2. 使用jq扩展

本文主要介绍PHP解决办法中的第三种,这个方法很少用到,但是感觉又起来还不错。

get_headers需要支持
  1. php_openssl支持  查看phpinfo看看是否开启
  2. allow_url_fopen=on  修改php.ini,运行使用远程打开


函数介绍

array get_headers ( string $url [, int $format ] )

get_headers() 返回一个数组,包含有服务器响应一个 HTTP 请求所发送的标头。如果失败则返回 FALSE 并发出一条 E_WARNING 级别的错误信息。

如果将可选的 format 参数设为 1,则 get_headers() 会解析相应的信息并设定数组的键名。 例如:


简单的例子:

<?php 
$url = "http://cn.php.net/images/php.gif"; 
$array = get_headers($url,1); 
if(preg_match('/200/',$array[0])){ 
    echo "<pre/>"; 
    print_r($array); 
}else{ 
    echo "无效url资源!"; 
}

解释:判断远程图片ur是否有效,根据返回值HTTP中是否有200信息,判断是否是有效url资源

测试结果:


可以看到正确返回 -----------------------测试ok


优点缺点:

需要allow_url_fopen=on  开启,有点和file_get_contents函数使用条件类似,但是返回值比较少,可以使用function_exists判断该方法是否可以使用

js方法:

解决方案一: XMLHTTP方案

<script language= "javascript">
function getURL(url) {
        var xmlhttp = new ActiveXObject( "Microsoft.XMLHTTP");
        xmlhttp.open("GET", url, false);
        xmlhttp.send();
        if(xmlhttp.readyState==4) {
            if(xmlhttp.Status != 200) alert("不存在");
            return xmlhttp.Status==200;
        }
        return false;
}
</script>
<a href= "http://www.oschina.net/aaa.jsp "  onclick= "return  getURL(this.href)"> oschina </a>

缺点: 使用ActiveXObject, 所以是IE Only. 非IE内核浏览器不可用.

解决方案二: jQuery扩展
jQuery插件:http://plugins.jquery.com/project/linkchecker
Demo:http://sidashin.ru/linkchecker/
代码只要这样几句:

<script src="jquery.js"></script>
<script src="jquery.linkchecker.js"></script>
<script type="text/javascript">
$(document).ready( function() {   
    $.linkChecker({query : 'a', linksAtOnce : 2});  
});
</script>

转载于:https://my.oschina.net/liux/blog/41799

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring中,有几种方式可以实现接口防止重复提交。 一种方式是使用自定义注解来实现,比如使用定义注解`@RepeatSubmit`。这个注解可以标注在Controller的方法上,通过设置`interval`属性来指定两个请求之间的间隔时间,设置`message`属性来指定重复提交的提示文本。\[1\]通过在方法上添加这个注解,可以在方法执行前进行判断,如果在指定的时间间隔内重复提交了请求,就会返回提示信息,从而防止重复提交。 另一种方式是针对请求链接URL + 请求体的方式。这种方式可以更加细粒度地控制接口的重复提交。在实际项目开发中,可以通过在Controller的方法中添加相应的逻辑来实现。比如可以在方法中保存一个请求的唯一标识,然后在每次请求到达时进行判断,如果已经存在相同的请求标识,就认为是重复提交,返回相应的提示信息。\[2\] 举个例子,可以在Controller的方法上添加`@RepeatSubmit`注解,并设置相应的属性。比如在`HelloController`的`hello`方法上添加`@RepeatSubmit(interval = 10000)`,表示在10秒内不允许重复提交。\[3\] 总结起来,Spring中接口防止重复提交的几种方式包括使用自定义注解和针对请求链接URL + 请求体的方式。具体选择哪种方式取决于项目的需求和实际情况。 #### 引用[.reference_title] - *1* *3* [接口幂等性(防止接口重复提交)](https://blog.csdn.net/m0_46159525/article/details/126631112)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [干货实战~Java如何防止接口重复提交](https://blog.csdn.net/weixin_42498641/article/details/114078587)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值