3ENGINE

Programación y otros cachivaches

Etiqueta: Herramienta Web

Página 1/11

Tecnologia

Cómo deshabilitar la política del mismo origen en Chrome


Como medida de seguridad los navegadores web tienen un mecanismo que impiden acceder a datos de otras páginas web cuando el origen (protocolo, host y puerto ) no coinciden.

A continuación detallo los pasos para deshabilitar la política del mismo origin en Chrome, o lo que es lo mismo, cómo activar CORS (Cross-Origin Resource Sharing).

Paso 1: Localizar los binarios de Chrome

Si tienes acceso directo en tu escritorio, simplemente haz clic derecho y selecciona «Propiedades». El campo Target/Destino contiene la ruta completa al binario.

Sino tienes acceso directo, y el acceso directo está anclado a la barra de tareas, entonces click derecho en Chrome, luego de nuevo click derecho en Chrome en el menu y por último click izquierdo en «Propiedades».

Paso 2: Ejecutar Chrome desde linea de comando para desactivar la política del mismo origen

Abre un consola. Y ejecuta el siguiente comando, sustituyendo la ruta a Chrome por la obtenida en el apartado anterior. Fijate que tendrás que pasarle la ruta a una carpeta donde Chrome guardará sus archivos temporales.

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security --user-data-dir="c:/carpeta_temporal"

Extra

En Linux usa uno de los dos siguientes comandos. El primero si tienes instalado Chrome o el segundo si tienes instalado Chromium:

google-chrome --disable-web-security --user-data-dir="/tmp/carpeta_temporal" 
chromium-browser --disable-web-security --user-data-dir="/tmp/carpeta_temporal"



Tecnologia

Método rápido para servir archivos a través de HTTP (Servidor HTTP) con SimpleHTTPServer


Python viene con un módulo llamado SimpleHTTPServer que permite montar un sencillo Servidor HTTP al que acceder través de localhost. Esto es útil a la hora de desarrollar porque hay cosas que no funcionan con ficheros. Por ejemplo las URLs en los navegadores web.

En la documentación de Python explica que también es posible «lanzar» directamente el servidor HTTP utilizando el modificador -m del intérprete y como argumento opcional el número de puerto.

Ejemplo:

python -m SimpleHTTPServer 8000

La clase encarga de hacer todo esto es SimpleHTTPRequestHandler que implementa la interface BaseHTTPRequestHandler. Esta clase es capaz de servir archivos del directorio actual y de cualquier archivo que esté por debajo, asi como la cartografía de la estructura de directorios en una petición HTTP:

Servidor HTTP

Un problemilla: SimpleHTTPRequestHandler no admite HTTP POST

Tengo form.html que contiene un formulario con un submit action de tipo POST:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
  <img src="python.png"/>
  <form action="action_page.php" method="post">
    First name:<br>
    <input type="text" name="firstname" value="Mickey"><br>
    Last name:<br>
    <input type="text" name="lastname" value="Mouse"><br><br>
    <input type="submit" value="Submit">
  </form>
</body>
</html>

Con el siguiente resultado:

form

Ahora bien si hago submit me encuentro con una desagradable sorpresa:

error

El problema es que SimpleHTTPRequestHandler implementa las funciones do_GET() y do_HEAD(), pero NO implementa do_POST() aunque si lo pensamos tiene cierta lógica.

Implementación de do_POST() con el objetivo de testear una aplicación

Si el objetivo es comprobar que información POST esta llegando al servidor esta implementación puede servirnos:

from SimpleHTTPServer import SimpleHTTPRequestHandler
import SocketServer
import time
import urlparse
from cgi import parse_header, parse_multipart

class MyRequestHandler(SimpleHTTPRequestHandler):

    def __init__(self, *args):
        SimpleHTTPRequestHandler.__init__(self, *args)

    def parse_POST(self):
        ctype, pdict = parse_header(self.headers['content-type'])
        if ctype == 'multipart/form-data':
            postvars = parse_multipart(self.rfile, pdict)
        elif ctype == 'application/x-www-form-urlencoded':
            length = int(self.headers['content-length'])
            postvars = urlparse.parse_qs(
                    self.rfile.read(length), 
                    keep_blank_values=1)
        else:
            postvars = {}
        return postvars
    
    def do_GET(self):
        print self.command
        print self.path
        return SimpleHTTPRequestHandler.do_GET(self)

    def do_POST(self):
        print self.command
        print self.path
        fields = self.parse_POST()
        self.send_response(200) 
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write('<ul>')
        for key, value in fields.iteritems():
            self.wfile.write('<li>%s: %s</li>' % (key, value))
        self.wfile.write('</ul>')

PORT = 8000
Handler = MyRequestHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)

print "serving at port", PORT
httpd.serve_forever()

Si lanzo el script, ahora al hacer el submit de form.htm este es el resultado:

resultpost

Espero que os pueda servir.
demo: server.zip




Tecnologia

Cómo configurar un CGI en IIS7


CGI viene de Common Gateway Interface. Fueron una de las primeras tecnologías de la WWW que permitia a un navegador web solicitar datos de un programa ejecutado en un servidor web. Hoy en día esta en desuso, pero si por algún motivo necesitas hacerlo funcionar, te explico cómo configurar un CGI en IIS7.

Instalar (o configurar) IIS7

Instalar IIS7 desde la pantalla Activar o desactivar características de Windows que se encuentra en Programas y características de Windows 7. Para poder configurar un CGI es necesario activar las opciones CGI, Extensiones y Filtros ISAPI

Cómo configurar un CGI en IIS7

Edita las restricciones de ISAPI y CGI

Abre IIS7, haz doble click en el nombre del servidor en la parte superior y por último click en la opción Restricciones de ISAPI y CGI

Cómo configurar un CGI en IIS7

Ahora agrega una restricción, selecciona tu CGI (que normalmente tendrá extensión .dll o .exe) y activa la casilla Permitir ejecución de la ruta de extensión

Cómo configurar un CGI en IIS7

Edita tu aplicación Web para permitir ejecutar un CGI

Pero por defecto IIS7 no permite que una aplicación ejecute un CGI. Ahora en IIS7 selecciona tu aplicación y doble click en la opción Asignaciones de controlador

Cómo configurar un CGI en IIS7

Una vez dentro modifica los permisos de características del controlador CGI-exe y activa la casilla Ejecutar

Cómo configurar un CGI en IIS7

 

Reinicia IIS7

Para asegurar que IIS7 queda perfectamente configurado es recomendable reiniciarlo. Esto lo puedes hacer bien desde la propia consola de administración de IIS7 o bien desde la consola de comandos con la orden iisreset
 

Habilitar CGI de 32 bits

Si el CGI es una aplicación de 32 bits y IIS es de 64 bits no funcionará sino habilitas la opción. Si quieres saber cómo hacerlo te explico cómo habilitar aplicaciones de 32 bits en II7




Tecnologia

Como descargar videos de Youtube (y otros proveedores) con Youtube-dl


Existen varias aplicaciones que permiten descargar videos de youtube. (youtube-dl, cclive, clive, rtmpdump, get_flash_videos,…) Pero una de las aplicaciones mas sencillas es youtube-dl, disponible para Linux, Windows y Mac OS X. Necesitarás Python para que funcione.

descargar videos de Youtube

Para instalar youtube-dl en Ubuntu

1. Examinar https://yt-dl.org/downloads/ y localizar la carpeta mas actual. A fecha de hoy la carpeta mas actual es 2014.04.21.6:

2. Descargar la última versión de youtube-dl y dar permisos de ejecución:

$ sudo wget http://yt-dl.org/downloads/2014.04.21.6/youtube-dl -O /usr/local/bin/youtube-dl
$ sudo chmod a+x /usr/local/bin/youtube-dl

Para instalar youtube-dl en Windows

1. Muy sencillo. Ir a la página de descarga y bajar la última versión de la aplicación. La aplicación es un simple .exe

Algunos comandos útiles

1. Actualizar a la última versión (hazlo si tienes problemas para descargar) :

$ sudo youtube-dl -U

2. Averiguar que proveedores soporta youtube-dl:

$ youtube-dl --list-extractors

3. Descargar vídeos por palabra clave de youtube utiliza ytsearch. Por defecto descargará la primera coincidencia. Otra variante es ytsearchN donde N es el número de vídeos a descargar. Para descargar todos los vídeos que coincidan utilizar ytsearchall. Para buscar en google (www.google.es/videohp‎) utilizar gvsearch. Para buscar en Yahoo (http://es.video.search.yahoo.com) utilizar yvsearch :

Descargar la primera coincidencia

$ youtube-dl "ytsearch:hola soy german"

Descargar las tres primeras coincidencias:

$ youtube-dl "ytsearch3:hola soy german"

Para listar las tres primeras coincidencias sin descargar los videos añadir -s:

$ youtube-dl -s "ytsearch3:hola soy german"

4. Para descargar un vídeo en concreto (el de mas alta calidad) pasar la URL del vídeo:

$ youtube-dl https://www.youtube.com/watch?v=My2FRPA3Gf8

5. Para ver resoluciones y formatos soportados de un vídeo en concreto:

$ youtube-dl --list-formats https://www.youtube.com/watch?v=My2FRPA3Gf8

Si por ejemplo el resultado es el siguiente:

[info] Available formats for My2FRPA3Gf8:
format code extension resolution  note 
171         webm      audio only  DASH webm audio , audio@ 48k (worst)
140         m4a       audio only  DASH audio , audio@128k
160         mp4       144p        DASH video , video only
242         webm      240p        DASH webm 
133         mp4       240p        DASH video , video only
243         webm      360p        DASH webm 
134         mp4       360p        DASH video , video only
244         webm      480p        DASH webm 
135         mp4       480p        DASH video , video only
247         webm      720p        DASH webm 
136         mp4       720p        DASH video , video only
248         webm      1080p       DASH webm 
137         mp4       1080p       DASH video , video only
17          3gp       176x144     
36          3gp       320x240     
5           flv       400x240     
43          webm      640x360     
18          mp4       640x360     
22          mp4       1280x720    (best)

Para descargar el formato identificado por el 18 (mp4 640×360):

$ youtube-dl -f 18 https://www.youtube.com/watch?v=My2FRPA3Gf8

7. Para mostrar la ayuda en linea:

$ youtube-dl --help