我有一个使用套接字连接到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
任何帮助将不胜感激:)
答案 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.rocks
。
client request询问顶级URL,询问/
斜杠或root。
您可以选择parse除去URL组件。
但是使用import requests
可能会更好。