【问题标题】:Python urllib2 ensuring url is well-formedPython urllib2 确保 url 格式正确
【发布时间】:2011-11-25 22:37:33
【问题描述】:

ValueError: unknown url type in urllib2, though the url is fine if opened in a browser 中指出,在调用opener.open() 之前,您必须确保传递给它的url 格式正确(即-HTTP url 有一个“http://”前缀,“ftp: //" 用于 FTP 等)。

问题被提炼为“是否可以使用某些内置函数自动处理此类情况,或者我必须对后续字符串连接进行错误处理?”或者换一种说法:有没有内置的 Python 可以做到这一点?

但是,这个精致的问题从未得到回答,因此在这里重新提问。自己做很容易,但为什么要重新发明轮子呢?

【问题讨论】:

    标签: python httprequest urllib2


    【解决方案1】:

    在 Python 中,接受和异常而不是提前检查值是很常见的。所以像这样的东西对我来说是完美的,可能对大多数 Python 程序员来说都是这样的:

    try:
        opener.open(url)
    except ValueError,e:
        # fix url and try again
        # ...
    

    但我不明白您希望如何自动处理不带前缀的网址。前缀定义要使用的协议。如果不给,你会怎么“猜”?

    【讨论】:

    • 公平地说,我的实际用例总是使用 http URL,所以我认为您不能真正从 URL 中分辨出协议。谢谢!
    【解决方案2】:

    如果您想默认添加http://,您确实需要自己执行此操作。没有理由说这应该比预先添加更好。 gopher:mailto:news: - 有很多协议。

    仅仅因为今天的网络浏览器对用户隐藏http:// 前缀并不会使其过时。

    【讨论】:

    • 作为后续,主机名后也必须至少有一个斜杠。所以http://www.google.com 实际上不是 一个正确的URL。不过,您的浏览器或 Web 服务器都会将您重定向到 http://www.google.com/
    • 哦,如果你只打算支持http://,你可以考虑总是在前面加上它,除非你的url已经以http://开头。
    猜你喜欢
    • 1970-01-01
    • 2012-09-02
    • 2011-07-09
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    相关资源
    最近更新 更多