Rust 向GET调用添加头

Rust 向GET调用添加头,rust,reqwest,Rust,Reqwest,我不熟悉Rust,并尝试使用reqwest板条箱调用API。 我想让我的代码 在GET请求中包含“Content Disposition:Inline”头 返回JSON并将其打印为文本 我不确定我做错了什么,希望有人能帮我找出原因 在JS和Postman中,请求对我来说很好,并返回数组JSON数据, 同样在我的锈代码下面,请求返回一个200成功 但我看不到响应数据 &远程服务器使用“Content Disposition”头默认值(不是我指定的“inline”)进行响应 我的Rust代码编译良好

我不熟悉Rust,并尝试使用
reqwest
板条箱调用API。 我想让我的代码

  • 在GET请求中包含“Content Disposition:Inline”头
  • 返回JSON并将其打印为文本
  • 我不确定我做错了什么,希望有人能帮我找出原因

    在JS和Postman中,请求对我来说很好,并返回数组JSON数据, 同样在我的锈代码下面,请求返回一个200成功

    但我看不到响应数据 &远程服务器使用
    “Content Disposition”
    头默认值(不是我指定的“inline”)进行响应

    我的Rust代码编译良好,似乎发送正常:

    外部板条箱要求;
    使用reqwest::header::HeaderName;
    使用reqwest::header::HeaderValue;
    使用reqwest::header::ACCEPT;
    使用reqwest::header::CONTENT\u DISPOSITION;
    fn main(){
    让client=reqwest::client::new();
    let response_text=client
    .get(“http://nemlog.com.au/show/1h/NEMLOG.json?id1=RRP.DISPATCHPRICE0&k1=vic")
    .header(内容处理,“内联”)
    .header(接受“*/*”)
    .send()
    .unwrap();
    println!(“响应文本:{:},响应文本);
    }
    
    我在控制台中收到的来自上述请求的响应是:

    Response Text: Response {
      url: "http://nemlog.com.au/show/1h/NEMLOG.json?id1=RRP.DISPATCHPRICE0&k1=vic",
      status: 200,
      headers: {
        "date": "Tue, 22 Oct 2019 06:33:45 GMT",
        "server": "Apache/2.4.6 (CentOS) PHP/5.4.16 mod_wsgi/3.4 Python/2.7.5",
        "content-disposition": "attachment; filename=NEMLOG.json",
        "transfer-encoding": "chunked",
        "content-type": "text/json; name=\"NEMLOG.json\"",
      },
    }
    
    我希望看到的输出是来自调用的内联响应,如下所示:

    {"SETTLEMENTDATE":"2019-10-22T10:45:00Z","REGIONID":"VIC1","RRP.DISPATCHPRICE0":91.272}
    {"SETTLEMENTDATE":"2019-10-22T10:50:00Z","REGIONID":"VIC1","RRP.DISPATCHPRICE0":75.7859}
    {"SETTLEMENTDATE":"2019-10-22T10:55:00Z","REGIONID":"VIC1","RRP.DISPATCHPRICE0":74.8683}
    {"SETTLEMENTDATE":"2019-10-22T11:00:00Z","REGIONID":"VIC1","RRP.DISPATCHPRICE0":25.14}
    {"SETTLEMENTDATE":"2019-10-22T11:05:00Z","REGIONID":"VIC1","RRP.DISPATCHPRICE0":16.4812}
    {"SETTLEMENTDATE":"2019-10-22T11:10:00Z","REGIONID":"VIC1","RRP.DISPATCHPRICE0":56.4572}
    {"SETTLEMENTDATE":"2019-10-22T11:15:00Z","REGIONID":"VIC1","RRP.DISPATCHPRICE0":38.5679}
    {"SETTLEMENTDATE":"2019-10-22T11:20:00Z","REGIONID":"VIC1","RRP.DISPATCHPRICE0":47.5941}
    {"SETTLEMENTDATE":"2019-10-22T11:25:00Z","REGIONID":"VIC1","RRP.DISPATCHPRICE0":25.14}
    {"SETTLEMENTDATE":"2019-10-22T11:30:00Z","REGIONID":"VIC1","RRP.DISPATCHPRICE0":51.8465}
    {"SETTLEMENTDATE":"2019-10-22T11:35:00Z","REGIONID":"VIC1","RRP.DISPATCHPRICE0":71.7957}
    {"SETTLEMENTDATE":"2019-10-22T11:40:00Z","REGIONID":"VIC1","RRP.DISPATCHPRICE0":72.0757}
    

    我对rust和reqwest都没有深入的了解,但从我所看到的情况来看,您可以将响应对象转换为文本并打印响应结构,而不需要消息体或负载。通过在Google上的快速搜索,我找到了一个属于Response对象的方法
    text()
    ,它应该为您提供有效负载

    以下是链接:

    这可能是一个解决方案:

    extern crate reqwest;
    use reqwest::header::HeaderName;
    use reqwest::header::HeaderValue;
    use reqwest::header::ACCEPT;
    use reqwest::header::CONTENT_DISPOSITION;
    
    fn main() {
        let client = reqwest::Client::new();
        let response_text = client
            .get("http://nemlog.com.au/show/1h/NEMLOG.json?id1=RRP.DISPATCHPRICE0&k1=vic")
            .header(CONTENT_DISPOSITION, "inline")
            .header(ACCEPT, "*/*")
            //.send() <-- it seems that you do not have to send explicitly
            .text();  // <-- !!!!!!! Change
    
        println!("Response Text: {:#?}", response_text);
    }
    
    外部板条箱要求;
    使用reqwest::header::HeaderName;
    使用reqwest::header::HeaderValue;
    使用reqwest::header::ACCEPT;
    使用reqwest::header::CONTENT\u DISPOSITION;
    fn main(){
    让client=reqwest::client::new();
    let response_text=client
    .get(“http://nemlog.com.au/show/1h/NEMLOG.json?id1=RRP.DISPATCHPRICE0&k1=vic")
    .header(内容处理,“内联”)
    .header(接受“*/*”)
    
    //.send()
    send
    是惰性的:它会在收到回复标头后立即返回,而不必等待正文。您可以使用该方法获取文本,该方法会一直等到收到全文,或者您可以使用实现将其分块处理:

    let mut response = client
        .get("http://nemlog.com.au/show/1h/NEMLOG.json?id1=RRP.DISPATCHPRICE0&k1=vic")
        .header(CONTENT_DISPOSITION, "inline")
        .header(ACCEPT, "*/*")
        .send()
        .unwrap();
    
    println!("Response: {:#?}", response);
    println!("Response text: {}", response.text().unwrap());
    
    至于回复的
    内容处置
    ,您确定您的服务器遵守
    内容处置
    标题吗?您可以通过JS和Postman检查您收到的回复标题吗?

    谢谢Peter和Omer

    我设法解决了这个问题,答案是你的建议的组合。 我需要将以下内容添加到要发送的代码中,展开响应,然后运行text方法:

    .send()
    .unwrap()
    .text();
    

    非常感谢两位!

    谢谢Omer。我设法解决了这个问题,这是您和Peter描述的一个组合。非常感谢。我对我的答案投反对票没有问题。但我看不出有什么问题。我不是铁锈大师,但我可以阅读手册。这对OP很有用。那么为什么要将这个答案标记为没有价值并保留阻止他人获得有用的信息或链接?如果有错误,为什么要拒绝投票。为什么不写一篇评论,指出问题所在并帮助他人。从我的观点来看:我收到一条信息,我的答案有问题,但我不知道是什么问题。