2012-03-24 2 views
7

어떻게 URL 문자열에서 HTML 응답을받을 수 있나요? 이 사용 :어떻게 URL 문자열에서 HTML 응답을 얻을 수 있습니까? (계획/라켓)

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

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

난 당신이 단지 HTTP GET에 해당하고 싶지 있으리라 믿고있어 나에게 ws-connect: Invalid server handshake response. Expected #"\242\266\336\364\360\"\21~Y\347w\21L\2326\"", got #"<!DOCTYPE html>\n"

+0

중복 가능성 [내가 라켓에서 웹 페이지를 읽을 어떻게해야합니까?] (http://stackoverflow.com/questions/14016254/how-do-i-read-a-web-page-in-racket) –

답변

11

를 제공합니다.

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

사용 get-pure-port는 HTTP GET 할 수 있습니다; 그것은 입력 포트를 반환합니다. 또한 위의 URL이 리디렉션되므로 다음 리디렉션을 사용해야합니다.

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

을 또는 당신은 HTML이나 XML로 구문 분석 일부 함수에 전달할 수 : 단일 문자열로 응답을 원하는 경우에

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

당신은 port->string를 사용할 수 있습니다. PLaneT에 이러한 여러 도서관이있다; 나는 (planet neil/html-parsing:1)을 추천한다.

자동으로 포트를 닫는 처리하는, 또한 call/input-url를 참조하십시오. 의

관련 문제