如何在httr2中使用代理服务器?无需设置全局curl代理的方案问询
httr2单请求独立设置代理解决方案
httr2没有内置单独的use_proxy()快捷方法,但可以通过req_options()直接给单个请求传入curl原生代理参数,完全不需要修改全局curl配置,完美适配并行爬取、单请求切换代理IP的需求,效果和httr::use_proxy()完全一致。
基础调用方式
给单个请求配置代理的写法如下,替换为你实际的代理信息即可:
library(httr2) response <- request("https://finance.yahoo.com/") %>% # 代理配置,无鉴权代理可删除proxyuserpwd参数 req_options( proxy = "代理IP地址", proxyport = 代理端口号, proxyuserpwd = "代理用户名:代理密码" ) %>% req_perform()
如果使用socks5类型代理,额外添加proxytype = 5参数到req_options()中即可。
并行爬取适配示例
如果需要并行请求拆分IP,直接给每个请求绑定代理池中的不同配置即可,各请求的代理配置完全独立,不会互相干扰:
library(httr2) library(purrr) # 代理池示例,替换为你的实际代理列表 proxy_pool <- list( list(proxy = "1.1.1.1", proxyport = 8080), list(proxy = "2.2.2.2", proxyport = 8080), list(proxy = "3.3.3.3", proxyport = 8080) ) # 目标爬取URL列表示例 target_urls <- c( "https://finance.yahoo.com/quote/SPY", "https://etfdb.com/etf/QQQ/", "https://finance.yahoo.com/quote/VOO" ) # 批量生成绑定独立代理的请求 req_list <- map2( target_urls, sample(proxy_pool, length(target_urls), replace = TRUE), \(url, proxy_cfg) { request(url) %>% req_options(!!!proxy_cfg) %>% req_timeout(10) %>% req_user_agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") } ) # 并行执行请求 parallel_responses <- multi_req_perform(req_list, pool = curl::new_pool(host_con = 10))
注意:该方案所有代理配置仅作用于当前请求,不会修改全局curl设置,也不会影响其他R进程的网络请求。
内容的提问来源于stack exchange,提问作者JJ Fantini
相关产品推荐
相关产品推荐

