Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get html response from a url string? (Scheme/Racket)

How can I get an html response from a url string? Using this:

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

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

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

like image 243
kim taeyun Avatar asked Mar 24 '12 03:03

kim taeyun


1 Answers

I'm assuming you just want to do the equivalent of an HTTP GET.

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

Use get-pure-port to do HTTP GET; it returns an input port. Also, the URL above redirects, so we have to enable following redirections.

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

If you want the response as a single string you can use port->string:

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

Or you could pass it to some function that parses it as HTML or XML. There are several such libraries on PLaneT; I recommend (planet neil/html-parsing:1).

See also call/input-url, which automatically handles closing the port.

like image 158
Ryan Culpepper Avatar answered Sep 24 '22 09:09

Ryan Culpepper