http.client.InvalidURL: nonnumeri c port: '//water-lined.net' Ошибка? - PullRequest
0 голосов
/ 17 февраля 2020

Я пытался создать скрипт, чтобы проверить, существует ли случайный веб-сайт, и затем открыл его, если он существует, но я продолжаю получать кучу разных ошибок. Вот мой код:

import webbrowser
import time
import random
import http.client
from random_word import RandomWords
r=RandomWords()
while True:
    possible_things = random.choice([".com",".net"])
    WEB = "http://"+r.get_random_word()+possible_things
    c = http.client.HTTPConnection(WEB)
    if c.getresponse().status == 200:
        seconds = random.randint(5,20)
        print("Web site exists; Website: "+WEB+" ; Seconds: "+seconds)
        time.sleep(seconds)
        webbrowser.open(WEB)
        print("Finished countdown, re-looping...")
    else:
        print('Web site DOES NOT exists; Website: '+WEB+'; re-looping...')

А вот и ошибка:

Traceback (most recent call last):
  File "C:\Users\[REDACTED]\AppData\Local\Programs\Python\Python37-32\lib\http\client.py", line 877, in _get_hostport
    port = int(host[i+1:])
ValueError: invalid literal for int() with base 10: '//water-lined.net'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "Troll.py", line 10, in <module>
    c = http.client.HTTPConnection(WEB)
  File "C:\Users\[REDACTED]\AppData\Local\Programs\Python\Python37-32\lib\http\client.py", line 841, in __init__
    (self.host, self.port) = self._get_hostport(host, port)
  File "C:\Users\[REDACTED]\AppData\Local\Programs\Python\Python37-32\lib\http\client.py", line 882, in _get_hostport
    raise InvalidURL("nonnumeric port: '%s'" % host[i+1:])
http.client.InvalidURL: nonnumeric port: '//water-lined.net'

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Я просто установил большую задержку и добавил много попыток, но большое спасибо @ Błotosmętek!

0 голосов
/ 17 февраля 2020
WEB = "http://"+r.get_random_word()+possible_things
c = http.client.HTTPConnection(WEB)

В первой из этих строк вы создаете URL-адрес, начиная с http: // Во второй вы передаете его функции, которая не ожидает URL-адрес, а скорее имя хоста с необязательным : и номер порта. Поскольку ваша строка содержит двоеточие после «http», предполагается, что «http» будет именем хоста, а все после двоеточия, ie «//something.tld» интерпретируется как номер порта - но его нельзя преобразовать в целое число, следовательно, ошибка.

То, что вы, вероятно, хотели сделать, это что-то вроде этого:

host = r.get_random_word() + possible_things
WEB = 'http://' + host
c = http.client.HTTPConnection(host)
c.request('GET', '/')
resp = c.getresponse()
if resp.status == 200:

et c.

...