2012-03-24 19 views
7

Làm cách nào để nhận phản hồi html từ chuỗi url? Sử dụng này:Cách nhận phản hồi html từ chuỗi url? (Đề án/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"])) 

Cung cấp cho tôi ws-connect: Invalid server handshake response. Expected #"\242\266\336\364\360\"\21~Y\347w\21L\2326\"", got #"<!DOCTYPE html>\n"

+0

bản sao có thể có của [Làm cách nào để đọc một trang web trong Racket?] (Http://stackoverflow.com/questions/14016254/how-do-i-read-a-web-page-in-racket) –

Trả lời

11

Tôi giả sử bạn chỉ muốn làm tương đương với một HTTP GET.

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

Sử dụng get-pure-port để thực hiện HTTP GET; nó trả về một cổng vào. Ngoài ra, URL ở trên chuyển hướng, vì vậy chúng tôi phải bật các chuyển hướng sau.

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

Nếu bạn muốn phản ứng như là một chuỗi duy nhất bạn có thể sử dụng port->string:

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

Hoặc bạn có thể vượt qua nó để một số chức năng mà phân tích nó dưới dạng HTML hay XML. Có một số thư viện như vậy trên PLaneT; Tôi khuyên bạn nên (planet neil/html-parsing:1).

Xem thêm call/input-url, thao tác này sẽ tự động xử lý việc đóng cổng.

Các vấn đề liên quan