2012-03-24 10 views
7

¿Cómo puedo obtener una respuesta html de una cadena url? El uso de este:¿Cómo obtener respuesta html desde una cadena url? (Esquema/Raqueta)

#lang racket 
(require net/url) 
(require net/websocket/client) 
(define google (string->url "http://google.com")) 

(ws-connect(struct-copy url google [scheme "ws"])) 

me da ws-connect: Invalid server handshake response. Expected #"\242\266\336\364\360\"\21~Y\347w\21L\2326\"", got #"<!DOCTYPE html>\n"

+0

posible duplicado de [¿Cómo leo una página web en Racket?] (Http://stackoverflow.com/questions/14016254/how-do-i-read-a-web-page-in-racket) –

Respuesta

11

Asumo lo que desea es hacer el equivalente de un HTTP GET.

(require net/url) 
(define google (string->url "http://google.com")) 

Usar get-pure-port para hacer HTTP GET; devuelve un puerto de entrada. Además, la URL anterior redirige, por lo que debemos habilitar las siguientes redirecciones.

(define in (get-pure-port google #:redirections 5)) 

Si desea que la respuesta como una única cadena que puede utilizar port->string:

(define response-string (port->string in)) 
(close-input-port in) 

O usted podría pasarlo a alguna función que analiza como HTML o XML. Hay varias bibliotecas de este tipo en PLaneT; Recomiendo (planet neil/html-parsing:1).

Vea también call/input-url, que maneja automáticamente el cierre del puerto.

Cuestiones relacionadas