import socket
def MiSocket(hostname, port, content):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("http://www.google.com", 80))
s.sendall(content)
s.shutdown(socket.SHUT_WR)
while 1:
data = s.recv(1024)
if data == "":
break
print ("Received: ")
print (data)
print ("Connection closed.")
s.close()
MiSocket("Los", "errores me", "tienen las bolas llenas xD")
File "<string>", line 16, in <module>
File "<string>", line 4, in MiSocket
socket.gaierror: [Errno 7] No address associated with hostname
Si uso el wget, nc, navegador... Funciona bien.
Probé hardcodeando la IP en IPv4 e IPv6 y me tira exactamente el mismo error.
por lo que veo el error es aqui
s.connect(("http://www.google.com", 80))
gaierror es error en el get address info
basicamente le estas diciendo que se conecte el host "http://www.google.com" y cuando intenta hacer la resolucion, ese host es invalido porque tiene simbolos como : y / , y no puede resolver la direccion ip
en pocas palabras, pasa el host... no tienes que pasar el protocolo http:// porque socket no entiende eso, es una interfaz de bajo nivel
Cita de: engel lex en 27 Diciembre 2019, 16:25 PM
por lo que veo el error es aqui
s.connect(("http://www.google.com", 80))
gaierror es error en el get address info
basicamente le estas diciendo que se conecte el host "http://www.google.com" y cuando intenta hacer la resolucion, ese host es invalido porque tiene simbolos como : y / , y no puede resolver la direccion ip
en pocas palabras, pasa el host... no tienes que pasar el protocolo http:// porque socket no entiende eso, es una interfaz de bajo nivel
Grache buen cheñor.
Si no me lo dices seguro que me habría tirado horas a intentar resolverlo. Habría probado hasta a crear un server DNS para que me resolviera el dominio creo yo.
import socket
def cliente(host, puerto, contenido):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, puerto))
contenido="GET /index.html HTTP/1.1\r\nHost: www.google.com\r\nConnection: close\r\n\r\n"
contenido = contenido.encode('utf-8')
s.sendall(contenido)
response = b''
while 1:
recv = s.recv(2048)
resp = repr(recv)
respT= len(resp)
if respT < 5:
break
response += recv
s.shutdown(socket.SHUT_WR)
s.close()
return response
respuesta = cliente("google.com" , 80 , 1)
print(respuesta)
print("Fin ejec")
Voy a ver si hago con un colega un rat multiplataforma que importe módulos con kivy o algo así que se ve chulo.