2017-04-05 15 views
5

मैंने देखा कि जंग के साथ रूट करने के लिए जंग में एक अंतर्निहित लाइब्रेरी नहीं है, इसमें केवल net मॉड्यूल है जो कच्चे आईपी और टीसीपी प्रोटोकॉल से संबंधित है।आप जंग में एक जीईटी अनुरोध कैसे करते हैं?

मैं URL की एक &str लेने के लिए, एक HTTP GET अनुरोध की जरूरत है, और अगर सफल वापसी या तो एक String या &str कि HTML या JSON या स्ट्रिंग के रूप में अन्य प्रतिक्रिया से मेल खाती है।

use somelib::http; 

let response = http::get(&"http://stackoverflow.com"); 
match response { 
    Some(suc) => suc, 
    None => panic! 
} 
+0

क्या आपने http crates के लिए googling की कोशिश की है? उदाहरण के लिए, [यह आपके लिए काम कर सकता है] (https://github.com/alexcrichton/curl-rust)। – user4815162342

+2

इस तरह का सवाल स्टैक ओवरफ़्लो पर ऑफ-विषय है, इसलिए यह बंद हो जाएगा। यदि आपको तब तक आपका जवाब नहीं मिला है, तो मैं आपको जंग टैग विकी [सहायता प्राप्त करना] (http://stackoverflow.com/tags/rust/info) अनुभाग देखने के लिए आमंत्रित करता हूं जो ओपन-एंडेड प्रश्नों के लिए अन्य स्थानों का विवरण देता है। –

उत्तर

5

Hyper पर एक नज़र डालें:

यह कुछ ऐसा दिखाई देगा।

एक जीईटी अनुरोध भेजना उतना आसान है जितना।

let client = Client::new(); 

let res = client.get("http://example.domain").send().unwrap(); 
assert_eq!(res.status, hyper::Ok); 

आप documentation में और उदाहरण पा सकते हैं।

संपादित: ऐसा लगता है कि Hyper थोड़ा और अधिक जटिल हो गया है क्योंकि वे Tokio उपयोग करने के लिए शुरू कर दिया। यहां अद्यतन संस्करण है।

extern crate futures; 
extern crate hyper; 
extern crate tokio_core; 

use std::io::{self, Write}; 
use futures::{Future, Stream}; 
use hyper::Client; 
use tokio_core::reactor::Core; 


fn main() { 
    let mut core = Core::new().unwrap(); 
    let client = Client::new(&core.handle()); 

    let uri = "http://httpbin.org/ip".parse().unwrap(); 
    let work = 
     client.get(uri).and_then(|res| { 
      println!("Response: {}", res.status()); 

      res.body().for_each(|chunk| { 
       io::stdout() 
        .write_all(&chunk) 
        .map_err(From::from) 
      }) 
     }); 
    core.run(work).unwrap(); 
} 

और यहां आवश्यक निर्भरताएं हैं। निर्दिष्ट के रूप में in the Rust Cookbook

[dependencies] 
futures = "0.1" 
hyper = "0.11" 
tokio-core = "0.1" 
+7

यह अब काम नहीं करता है, क्योंकि 'हाइपर :: क्लाइंट :: नया' कुछ हैंडल तर्क लेता है। – marmistrz

2

इस विशेष समस्या के लिए मौजूदा सबसे अच्छा अभ्यास, reqwest टोकरा उपयोग करने के लिए है: रसोई की किताब का उल्लेख है

extern crate reqwest; 

use std::io::Read; 

fn run() -> Result<()> { 
    let mut res = reqwest::get("http://httpbin.org/get")?; 
    let mut body = String::new(); 
    res.read_to_string(&mut body)?; 

    println!("Status: {}", res.status()); 
    println!("Headers:\n{}", res.headers()); 
    println!("Body:\n{}", body); 

    Ok(()) 
} 

के रूप में, इस कोड को तुल्यकालिक निष्पादित किया जाएगा।

+0

क्या आपने इसे चलाने का प्रयास किया है? मैं इसे संकलित भी नहीं कर सकता, rustc 1.19.0 –

+0

दुर्भाग्य से reqwest को ओपनएसएसएल की आवश्यकता है तो अच्छा नहीं है अगर आप क्रॉस संकलन कर रहे हैं –

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