2012-03-24 17 views
7

मैं यूआरएल स्ट्रिंग से एचटीएमएल प्रतिक्रिया कैसे प्राप्त कर सकता हूं? इस का उपयोग करते हुए:यूआरएल स्ट्रिंग से एचटीएमएल प्रतिक्रिया कैसे प्राप्त करें? (योजना/रैकेट)

#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

संभावित डुप्लिकेट [मैं रैकेट में एक वेब पेज कैसे पढ़ूं?] (Http://stackoverflow.com/questions/14016254/how-do-i-read-a-web-page-in-racket) –

उत्तर

11

मैं तुम्हें सिर्फ एक HTTP GET के बराबर करना चाहते हैं यह सोचते हैं रहा हूँ।

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

HTTP प्राप्त करने के लिए get-pure-port का उपयोग करें; यह एक इनपुट पोर्ट देता है। साथ ही, उपरोक्त यूआरएल रीडायरेक्ट करता है, इसलिए हमें निम्नलिखित पुनर्निर्देशन सक्षम करना होगा।

(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 भी देखें, जो स्वचालित रूप से बंदरगाह बंद करने को संभालता है।

संबंधित मुद्दे