Python 3.7 socket socket.gaierror errno7 cliente Android.

Iniciado por @XSStringManolo, 27 Diciembre 2019, 16:11 PM

0 Miembros y 1 Visitante están viendo este tema.

@XSStringManolo

Código (python) [Seleccionar]
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.

engel lex

por lo que veo el error es aqui

Código (python) [Seleccionar]
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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

@XSStringManolo

Cita de: engel lex en 27 Diciembre 2019, 16:25 PM
por lo que veo el error es aqui

Código (python) [Seleccionar]
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.

Código (python) [Seleccionar]
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.