httplib.InvalidURL: 非数字端口

15 投票
3 回答
44152 浏览
提问于 2025-04-17 13:28

我正在尝试写一个脚本,用来检查很多网址是否存在:

import httplib

with open('urls.txt') as urls:
    for url in urls:
        connection = httplib.HTTPConnection(url)
        connection.request("GET")
        response = connection.getresponse()
        if response.status == 200:
            print '[{}]: '.format(url), "Up!"

但是我遇到了这个错误:

Traceback (most recent call last):
  File "test.py", line 5, in <module>
    connection = httplib.HTTPConnection(url)
  File "/usr/lib/python2.7/httplib.py", line 693, in __init__
    self._set_hostport(host, port)
  File "/usr/lib/python2.7/httplib.py", line 721, in _set_hostport
    raise InvalidURL("nonnumeric port: '%s'" % host[i+1:])
httplib.InvalidURL: nonnumeric port: '//globo.com/galeria/amazonas/a.html

这是怎么回事呢?

3 个回答

2

非数字端口:

解决方案:

http.client.HTTPSConnection("api.cognitive.microsofttranslator.com")

把服务网址或端点中的https://去掉,这样就可以正常工作了。

https://appdotpy.wordpress.com/2020/07/04/errorsolved-nonnumeric-port/

33

这可能是一个简单的解决方案,

connection = httplib.HTTPConnection(url)

你在使用 httpconnection,所以不需要像这样给出网址:http://OSMQuote.com,而是应该直接给出OSMQuote.com

简单来说,就是把网址中的 http://https:// 去掉,因为 httplib 会把 : 当作端口号,而端口号必须是数字。

希望这对你有帮助!

9

httplib.HttpConnection 在创建的时候只需要提供远程网址的 host(主机名)和 port(端口号),而不是整个网址。

对于你的情况,使用 urllib2.urlopen 会更简单。

import urllib2

with open('urls.txt') as urls:
    for url in urls:
        try:
            r = urllib2.urlopen(url)
        except urllib2.URLError as e:
            r = e
        if r.code in (200, 401):
            print '[{}]: '.format(url), "Up!"
        elif r.code == 404:
            print '[{}]: '.format(url), "Not Found!" 

撰写回答