2012-03-24 52 views
7

如何從url字符串獲取html響應?使用此:如何從url字符串獲取html響應? (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"])) 

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

+0

可能的[如何在Racket中讀取網頁?](http://stackoverflow.com/questions/14016254/how-do-i-read-a-web-page-in-racket) – 2014-09-25 00:14:27

回答

11

我假設你只想做一個HTTP GET的等價物。

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

使用get-pure-port做HTTP GET;它返回一個輸入端口。此外,上面的網址也會重定向,因此我們必須啓用以下重定向。

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

如果你想響應爲一個字符串,你可以使用port->string

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

或者你可以把它的一些功能將其解析爲HTML或XML。在PLaneT上有幾個這樣的庫;我建議(planet neil/html-parsing:1)

另請參閱call/input-url,它會自動處理關閉端口。