Rust: reqwest库示例

一、异步处理单任务
1、cargo.toml

[dependencies]
tokio = { version = "1.0.0",  features = ["full", "tracing"] }
tokio-util = { version = "0.7.0",  features = ["full"] }
tokio-stream = { version = "0.1"  }tracing = "0.1"
tracing-subscriber = { version = "0.3.1", default-features = false, features = ["fmt", "ansi", "env-filter", "tracing-log"] }
bytes = "1.0.0"
futures = { version = "0.3.0", features = ["thread-pool"]}
http = "1.0.0"
serde = "1.0.55"
serde_derive = "1.0"
serde_json = "1.0"
httparse = "1.0"
httpdate = "1.0"
once_cell = "1.5.2"
rand = "0.8.3"
csv = "1.3.0"
encoding= "0.2.33"
reqwest = { version = "0.11", features = ["json"] }

主要看tokio和reqwest设置就可以了。其它是个人其它的库,没有删除。

2、代码

use reqwest::{self};#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {let url = "https://vip.stock.finance.sina.com.cn/quotes_service/view/vMS_tradedetail.php?symbol=sz000001";let content = reqwest::get(url).await?.text_with_charset("utf-8").await?;println!("{content}");Ok(())
}

或者

use reqwest::{self};
#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {let url = "https://vip.stock.finance.sina.com.cn/quotes_service/view/vMS_tradedetail.php?symbol=sz000001";let _body = reqwest::get(url).await?.text().await?;println!("{_body}");Ok(())
}

二、异步处理多任务

下面代码参考了
https://blog.csdn.net/wsp_1138886114/article/details/111354010。谨仅参考。
新测是有效的。也可以处理中文字符的问题。
cargo.toml文件,同上。
有异步要爬多个网站的任务,可以参考如下:

相关代码:

use tokio;
use futures::future::join_all;async fn fetch_path(path:String) -> Result<String,reqwest::Error>{let mut back_string = String::new();match reqwest::get(&path).await {Ok(response) => {match response.text().await{Ok(text) =>{println!("Read response text {},{}" ,text.len(),text);back_string = format!("Read response text {} \t {}\t {}",path,text.len(),text)}Err(_) => {println!("Read response text Error!")}};}Err(_) => {println!("reqwest get Error!")}}Ok(back_string)
}#[tokio::main]
async fn main() -> Result<(),reqwest::Error>{let paths = vec!["https://www.qq.com.cn".to_string(),"https://www.sina.com.cn".to_string(),"https://www.sohu.com.cn".to_string()]; let result_list = join_all(paths.into_iter().map(|path|{fetch_path(path)})).await;let mut list_string:Vec<String> = vec![];for ele in result_list.into_iter(){if ele.is_ok(){list_string.push(ele.unwrap())}else {return Err(ele.unwrap_err())}}println!("请求输出:{:?}",list_string);Ok(())
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/699046.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抖音爬虫批量视频提取功能介绍|抖音评论提取工具

抖音爬虫是指通过编程技术从抖音平台上获取视频数据的程序。在进行抖音爬虫时&#xff0c;需要注意遵守相关法律法规和平台规定&#xff0c;以确保数据的合法获取和使用。 一般来说&#xff0c;抖音爬虫可以实现以下功能之一&#xff1a;批量视频提取。这个功能可以用于自动化地…

大数据-数据可视化-环境部署vue+echarts+显示案例

文章目录 一、安装node.js1 打开火狐浏览器,下载Node.js2 进行解压3 配置环境变量4 配置生效二、安装vue脚手架1 下载vue脚手架,耐心等待。三、创建vue项目并启动1 创建2 启动四、下载echarts.js与axios.js到本地。五、图表显示demo【以下所有操作均在centos上进行】 一、安…

使用C#+NPOI进行Excel处理,实现多个Excel文件的求和统计

一个简易的控制台程序&#xff0c;使用C#NPOI进行Excel处理&#xff0c;实现多个Excel文件的求和统计。 前提&#xff1a; 待统计的Excel格式相同统计结果表与待统计的表格格式一致 引入如下四个动态库&#xff1a; 1. NPOI.dll 2. NPOI.OOXML.dll 3. NPOI.OpenXml4Net.dll …

Python爬虫技术详解:从基础到高级应用,实战与应对反爬虫策略【第93篇—Python爬虫】

前言 随着互联网的快速发展&#xff0c;网络上的信息爆炸式增长&#xff0c;而爬虫技术成为了获取和处理大量数据的重要手段之一。在Python中&#xff0c;requests模块是一个强大而灵活的工具&#xff0c;用于发送HTTP请求&#xff0c;获取网页内容。本文将介绍requests模块的…

Java设计模式 | 简介

设计模式的重要性&#xff1a; 软件工程中&#xff0c;设计模式&#xff08;design pattern&#xff09;是对软件设计中普遍存在&#xff08;反复出现&#xff09;的各种问题&#xff0c;所提出的解决方案。 这个术语由埃里希 伽玛&#xff08;Erich Gamma&#xff09;等人在1…

在项目中应用设计模式的实践指南

目录 ✨✨ 祝屏幕前的您天天开心&#xff0c;每天都有好运相伴。我们一起加油&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 引言 一. 单例模式&#xff08;Singleton Pattern&#xff09; 1、实现单例模式的方式 1…

Python集合详细教程

Python集合是一种无序、可变的数据类型&#xff0c;它是由一组不重复的元素组成的。集合中的元素必须是可哈希的&#xff0c;即不可变的&#xff0c;例如数字、字符串、元组等。 创建集合 可以使用花括号{}或set()函数来创建集合。 复制代码# 使用花括号创建集合 set1 {1, …

【Leetcode】2583. 二叉树中的第 K 大层和

文章目录 题目思路代码结果 题目 题目链接 给你一棵二叉树的根节点 root 和一个正整数 k 。 树中的 层和 是指 同一层 上节点值的总和。 返回树中第 k 大的层和&#xff08;不一定不同&#xff09;。如果树少于 k 层&#xff0c;则返回 -1 。 注意&#xff0c;如果两个节点与根…

东南亚印度越南印尼菲律宾媒体海外宣发稿公司怎么找?跨境出海推广新闻营销资源渠道一览

【本篇由言同数字科技有限公司原创】随着全球化和互联网的普及&#xff0c;品牌跨境海外推广在东南亚地区变得越来越重要。印度、越南、印尼和菲律宾作为东南亚地区的重要经济国家&#xff0c;其崛起的中产阶级和不断增长的消费者市场成为国际品牌实现成功的理想目标。本文将探…

eureka 简介和基本使用

Eureka 是Netflix开发的服务发现框架&#xff0c;是Spring Cloud微服务架构中的一部分。它主要用于微服务架构中的服务注册与发现。Eureka由两部分组成&#xff1a;Eureka Server 和 Eureka Client。获取更详细的信息可以访问官网&#xff0c;如下图&#xff1a; Eureka Server…

【Docker 的安装:centos】

文章目录 1 :peach:各版本平台支持情况:peach:2 :peach:CentOS 安装:peach:2.1 :apple:安装依赖:apple:2.2 :apple:安装 Docker:apple:2.3 :apple:实战经验:apple:2.3.1 :lemon:Docker 镜像源修改:lemon:2.3.2 :lemon:Docker 目录修改:lemon: 1 &#x1f351;各版本平台支持情况…

How to run this world?

Run your organization effectively and keep everyone aligned with so many departments focused on different responsibilities——Talent, Finance, Operations, Sales, Marketing, Technology. But technology should be a key component in the business’s success, no…

Linux设备模型(二) - kset/kobj/ktype APIs

一&#xff0c;kobject_init_and_add 1&#xff0c;kobject_init_and_add实现 /** * kobject_init_and_add() - Initialize a kobject structure and add it to * the kobject hierarchy. * kobj: pointer to the kobject to initialize * ktype: p…

探索无限:Sora与AI视频模型的技术革命 - 开创未来视觉艺术的新篇章

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua&#xff0c;在这里我会分享我的知识和经验。&#x…

Unity实现帧序列

一、目的 1.想实现序列帧效果 自己使用Animation一直无法实现动画播放效果 二、参考 1. Unity序列帧动画——Sprite图片集制作UI动画_unity 序列帧动画图集-CSDN博客 结果&#xff1a;很好用&#xff0c;能实现效果 三、实操 新建Image&#xff0c;增加Animator组件&#x…

【数据结构】排序(1)

目录 一、概念&#xff1a; 二、直接插入排序&#xff1a; 三、希尔排序&#xff1a; 四、直接选择排序&#xff1a; 五、堆排序&#xff1a; 六、冒泡排序&#xff1a; 一、概念&#xff1a; 排序的概念&#xff1a; 使一串记录&#xff0c;按照其中的某个或某些关键字…

【电路笔记】-RC放电电路

RC放电电路 文章目录 RC放电电路1、概述2、RC放电电路3、RC放电电路示例当电压源从完全充电的 RC 电路中移除时,电容器 C 将通过电阻 R 放电。 1、概述 RC 放电电路利用电阻器-电容器组合的固有 RC 时间常数以指数衰减率对电容器进行放电。 在之前的 RC 充电电路教程中,我们…

向量的组成

向量是有序的一维数组&#xff0c;其中包含多个标量元素。每个元素都有一个索引&#xff0c;表示其在向量中的位置。在数学表示中&#xff0c;我们通常用小写粗体字母表示向量&#xff0c;如 v。 关于向量、张量、标量与矩阵的关系可以参见另一篇文章&#xff1a;线性代数&…

开源免费的NTFS for mac工具mounty

开源免费的NTFS for mac工具mounty 安装依赖 brew install gromgit/fuse/ntfs-3g-macbrew install --cask macfuse安装mounty 如果已经安装macFUSE和ntfs-3g-mac&#xff0c;可以直接点击下载的dmg安装包&#xff0c;安装升级。第一次启动mounty&#xff0c;你需要接受一系列…

Go slice的底层实现原理?

切片是基于数组实现的&#xff0c;它的底层是数组&#xff0c;可以理解为对 底层数组的抽象。 源码包中src/runtime/slice.go 定义了slice的数据结构&#xff1a; type slice struct {array unsafe.Pointerlen intcap int }slice占用24个字节 array: 指向底层数组的指针…