Как получить ответ html из строки URL?(Схема / Ракетка) - PullRequest
7 голосов
/ 24 марта 2012

Как я могу получить ответ html из строки URL? Используя это:

#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"

1 Ответ

11 голосов
/ 24 марта 2012

Я предполагаю, что вы просто хотите сделать эквивалент HTTP GET.

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

Используйте get-pure-port для выполнения HTTP GET; возвращает входной порт. Кроме того, URL-адрес выше перенаправляет, поэтому мы должны включить следующие перенаправления.

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

Если вы хотите получить ответ в виде одной строки, вы можете использовать port->string:

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

Или вы можете передать его какой-то функции, которая анализирует его как HTML или XML. На PLaneT есть несколько таких библиотек; Я рекомендую (планета Нил / html-разбор: 1) .

См. Также call/input-url, который автоматически обрабатывает закрытие порта.

...