httpsimpleserver - python simplehttpserver port
Python para listar los archivos y directorios HTTP (4)
HTTP no funciona con "archivos" y "directorios". Elija un protocolo diferente.
¿Cómo puedo hacer una lista de archivos y carpetas si solo tengo una dirección IP? Con urllib y otros, solo puedo mostrar el contenido del archivo index.html. Pero, ¿qué sucede si también quiero ver qué archivos están en la raíz? Estoy buscando un ejemplo que muestre cómo implementar el nombre de usuario y la contraseña si es necesario. (La mayoría de las veces, index.html es público, pero a veces los demás archivos no).
¡¡Gracias por adelantado!!
No puede obtener la lista del directorio directamente a través de HTTP, como dice otra respuesta. Es el servidor HTTP que "decide" qué regalarle. Algunos le darán una página HTML que mostrará enlaces a todos los archivos dentro de un "directorio", algunos le darán una página (index.html) y otros ni siquiera interpretarán el "directorio" como uno solo.
Por ejemplo, puede tener un enlace a "http: // localhost / user-login /": Esto no significa que haya un directorio llamado user-login en la raíz del documento del servidor. El servidor lo interpreta como un "enlace" a alguna página.
Ahora, para lograr lo que desea, debe usar algo que no sea HTTP (un servidor FTP en la "dirección IP" a la que desea acceder haría el trabajo), o configurar un servidor HTTP en esa máquina que proporciona para cada ruta (http://192.168.2.100/directory) una lista de archivos (en cualquier formato) y analizar eso a través de Python.
Si el servidor proporciona un tipo de página "index of / bla / bla" (como el servidor Apache, listados de directorios), podría analizar el resultado HTML para encontrar los nombres de los archivos y directorios. Si no (por ejemplo, un index.html personalizado, o lo que el servidor decida darle ), entonces no tiene suerte :(, no puede hacerlo.
Utilice las requests
para obtener contenido de la página y BeautifulSoup
para analizar el resultado.
Por ejemplo, si buscamos todos los archivos iso
:
from bs4 import BeautifulSoup
import requests
url = ''http://cdimage.debian.org/debian-cd/8.2.0-live/i386/iso-hybrid/''
ext = ''iso''
def listFD(url, ext=''''):
page = requests.get(url).text
print page
soup = BeautifulSoup(page, ''html.parser'')
return [url + ''/'' + node.get(''href'') for node in soup.find_all(''a'') if node.get(''href'').endswith(ext)]
for file in listFD(url, ext):
print file
Puede usar la siguiente secuencia de comandos para obtener nombres de todos los archivos en subdirectorios y directorios en un servidor HTTP. Se puede usar un escritor de archivos para descargarlos.
from urllib.request import Request, urlopen, urlretrieve
from bs4 import BeautifulSoup
def read_url(url):
url = url.replace(" ","%20")
req = Request(url)
a = urlopen(req).read()
soup = BeautifulSoup(a, ''html.parser'')
x = (soup.find_all(''a''))
for i in x:
file_name = i.extract().get_text()
url_new = url + file_name
url_new = url_new.replace(" ","%20")
if(file_name[-1]==''/'' and file_name[0]!=''.''):
read_url(url_new)
print(url_new)
read_url("www.example.com")