2012-03-24 12 views
7

Jak uzyskać odpowiedź html z ciągu URL? Korzystanie z tego:Jak uzyskać odpowiedź html z ciągu adresu url? (Scheme/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"])) 

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

+0

możliwy duplikat [Jak mogę przeczytać stronę w Racket?] (Http://stackoverflow.com/questions/14016254/how-do-i-read-a-web-page-in-racket) –

Odpowiedz

11

Jestem zakładając po prostu chcesz zrobić równowartość HTTP GET.

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

Użyj polecenia get-pure-port, aby wykonać HTTP GET; zwraca port wejściowy. Ponadto powyższy adres URL przekierowuje, więc musimy włączyć przekierowania.

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

Jeśli chcesz odpowiedzi jako jeden ciąg znaków można użyć port->string:

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

Albo można przekazać je do niektórych funkcji, które analizuje go jako HTML lub XML. Istnieje kilka takich bibliotek na PLaneT; Polecam (planet neil/html-parsing:1).

Zobacz także call/input-url, która automatycznie obsługuje zamykanie portu.

Powiązane problemy