2012-03-24 12 views
7

Come posso ottenere una risposta HTML da una stringa URL? L'utilizzo di questo:Come ottenere risposta HTML da una stringa di URL? (Schema/Racket)

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

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

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

+0

possibile duplicato di [Come si legge una pagina Web in Racket?] (Http://stackoverflow.com/questions/14016254/how-do-i-read-a-web-page-in-racket) –

risposta

11

sto supponendo che si desidera solo fare l'equivalente di un HTTP GET.

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

Utilizzare get-pure-port per eseguire HTTP GET; restituisce una porta di input. Inoltre, l'URL sopra reindirizza, quindi dobbiamo abilitare i seguenti reindirizzamenti.

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

Se si desidera che la risposta come una singola stringa è possibile utilizzare port->string:

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

Oppure si potrebbe passare a qualche funzione che analizza come HTML o XML. Esistono diverse librerie di questo tipo su PLaneT; Raccomando (planet neil/html-parsing:1).

Vedere anche call/input-url, che gestisce automaticamente la chiusura della porta.

Problemi correlati