2012-03-24 58 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,它会自动处理关闭端口。