Почему этот http-клиент работает только для некоторых сайтов? - PullRequest
0 голосов
/ 26 марта 2019

У меня есть программа на Python, которая подключается к веб-серверу с помощью сокетов и отображает его информацию.Кажется, он работает только на некоторых веб-сайтах.

from socket import *
import sys
from urllib.parse import urlparse

def parse_url(url):
    parsed = urlparse(url)
    return parsed.netloc

def run_client(url):
    target_port = 80
    target_host = url
    server_address = (target_host, target_port)

    client_socket = socket(AF_INET, SOCK_STREAM)
    client_socket.connect(server_address)
    request = "GET / HTTP/1.1\r\nHost: %s\r\n\r\n" % target_host
    client_socket.sendall(request.encode())
    receive = client_socket.recv(4096)
    decoded = receive.decode()

    print(decoded)

    client_socket.close()

def main(url):

    http = parse_url(url)
    run_client(http)

if __name__ == "__main__":
    main(sys.argv[1])

в командной строке: python3 program.py http://www.google.com/

Это показывает информацию http отлично, но с использованием веб-сайтакак http://www.wacky -wifi-wagons.rocks / coms3200 / style.css не будет отображать слова, которые вы видите при просмотре в браузере

Я хотел бы получить толькотри строки на этом сайте, вместо этого я получаю https://www.pastiebin.com/5c9a5f5942887

Любая помощь будет принята:)

1 Ответ

0 голосов
/ 26 марта 2019

Вы сказали, что поставили этот ввод как argv[1]:

http://www.wacky-wifi-wagons.rocks/coms3200/style.css

пока вы создали запрос следующим образом:

    request = "GET / HTTP/1.1\r\nHost: %s\r\n\r\n" % target_host

Это не могло сработать. Допустимый ввод будет www.wacky-wifi-wagons.rocks. клиентский запрос запрашивает URL верхнего уровня, запрашивая / косую черту или root.

Вы можете проанализировать компоненты URL. Но вам, вероятно, будет лучше с import requests.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...