修复损坏的网址 [重复]

Posted

技术标签:

【中文标题】修复损坏的网址 [重复]【英文标题】:Fixing broken urls [duplicate] 【发布时间】:2010-11-29 00:19:16 【问题描述】:

有谁知道修复“损坏”网址的库。当我尝试打开诸如

之类的网址时
http://www.domain.com/../page.html
http://www.domain.com//page.html
http://www.domain.com/page.html#stuff

urllib2.urlopen 阻塞并给我一个 HTTPError 回溯。有谁知道可以解决这些问题的库吗?

【问题讨论】:

最后一个是完全有效的不是吗? 为什么不扫描网址(我认为是在一个网站上),然后用找到的网址,您不能使用正则表达式替换坏的,或者最坏的情况是手动替换它们? @SeanJA:最后一个对浏览器有效,但浏览器会在发送到服务器之前删除#stuff部分。服务器可能会拒绝最后带有#stuff 的URL,这就是OP 发现urlopen 错误的原因。在向服务器询问该 URL 之前,必须删除此类词缀。 我什至不会尝试修复前两个。充其量它们可能是由于过多的复制和粘贴而导致格式错误(缺少“cgi-bin/awesomeblog”部分),最坏的情况是它们试图在 htdocs 之外窥视。您将如何“修复”example.com/../../etc/password 之类的网址 可能首先尝试确定他们为什么错了? 【参考方案1】:

诸如...之类的东西呢:

import re
import urlparse

urls = '''
http://www.domain.com/../page.html
http://www.domain.com//page.html
http://www.domain.com/page.html#stuff
'''.split()

def main():
  for u in urls:
    pieces = list(urlparse.urlparse(u))
    pieces[2] = re.sub(r'^[./]*', '/', pieces[2])
    pieces[-1] = ''
    print urlparse.urlunparse(pieces)

main()

它确实会如你所愿发出:

http://www.domain.com/page.html
http://www.domain.com/page.html
http://www.domain.com/page.html

如果我理解正确的话,看起来大致符合您的需求。

【讨论】:

domain.com/ohmygod///page.html domain.com/nono/...page.html 将不起作用 对,根据 OP 给出的唯一示例,我只是在路径的开头修复破损。您可以通过path.split('/') 修复更多破损,忽略空块并移除杂散的前导点。但是有更高阶的无限可能损坏的 URL,除非给出一些规范,否则不可能知道要修复什么!-)

以上是关于修复损坏的网址 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

当我尝试发布我的系统时,更新 V​​S2015 以修复错误时,“安装包丢失或损坏了 Visual Studio 2015”[重复]

Vuejs - 检查图像网址是不是有效或损坏

如何删除影响我的 SEO 的重复网址

PDF文件损坏?有效修复方式,亲测

SQL 2008 可疑状态,数据库好像损坏了

访问数据库损坏?