-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMiniBrowserPython.py
More file actions
67 lines (51 loc) · 1.82 KB
/
MiniBrowserPython.py
File metadata and controls
67 lines (51 loc) · 1.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# coding utf-8
# MiniBrowser.py
import os
import sys
import socket
from urllib import parse
import tempfile
import webbrowser
# Requisitando link do servidor e porta
serverName = input("Entre com o endereço do servidor HTTP: ")
serverPort = int(input("Entre com o número da porta: "))
# Definindo tipo de socket no caso IPV4
clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# conectando ao socket
try:
clientSocket.connect((serverName, serverPort))
print("#conectando ao servior")
except:
print("#Erro ao conectar \n..Fechando..")
sys.exit()
print("\n#Requisitando no servidor: ", serverName)
request = "GET / HTTP/1.1\r\nHost: " + serverName + "\r\nConnection: close \r\n\r\n"
print("#Enviando requisição")
clientSocket.sendall(request.encode('utf-8'))
# comecando a trabalhar com o arquivo que vai receber o html
f = open("index.html", "bw") # limpando se já existir
f.close()
f = open("index.html", "br+") # vai receber o HTML sem HTTP header
body = b"" # vai armazenar o recebido do servidor de socket
# salvando dados da request na variável body
print("#--->salvando requisição<---")
while True:
peca = clientSocket.recv(4096)
body = body + peca
if len(peca) < 1:
break
# retirando o header da variável body para escrita
headers = body.split(b'\r\n\r\n')[0]
body = body[len(headers) + 4:]
# escrevendo no arquivo
f.write(body)
# decodificando com caracteres asiaticos utf-8 nao funciona
body = body.decode('ISO-8859-1')
# output: HTML no terminal
print(body)
# passando o caminho do arquivo html salvo para ser aberto no browser
url = 'file://' + os.path.realpath('index.html')
# Renderizando o arquivo com o módulo webbrowser
webbrowser.open(url, new=1) # abrindo o código html
f.close()
clientSocket.close()