为什么此http客户端仅适用于某些网站?

时间:2019-03-26 17:09:59

标签: python python-3.x sockets http

我有一个使用套接字连接到Web服务器并显示其信息的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 :(得分:0)

您说您以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.rocksclient request询问顶级URL,询问/斜杠或root。

您可以选择parse除去URL组件。 但是使用import requests可能会更好。