我有R 4.20+,所以我相信utils::download.file
正在使用libcurl
功能。
我可以用base::curlGetHeaders(url)
得到url的头。
是否有一个参数可以传入download.file
来返回头文件,这样我就不能在同一个调用中得到它们了。在引擎盖下,download.file
在接收头文件时以某种方式处理它。
如何返回使用curlGetHeaders(url)
从download.file
函数获得的响应头?
我知道外部包(例如,Rcurl
),但要进行下载,必须在R:::base
内接收标头。
更新
下面是来自R的源代码
"libcurl" = {
headers <- if(length(headers)) paste0(nh, ": ", headers)
status <- .Internal(curlDownload(url, destfile, quiet, mode, cacheOK,
headers))
},
函数curlDownload
在这里有传统的curl选项(libcurl.c
):
curl_easy_setopt(hnd[i], CURLOPT_HTTPHEADER, headers);
设置头文件,而不是返回头文件。为什么原始curl
函数不公开。C
像PHP
一样公开它们...请参见
Can PHP cURL retrieve response headers AND body in a single request?
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
// ...
$response = curl_exec($ch);
所以我猜curlDownload
需要:
curl_easy_setopt(hnd[i], CURLOPT_HEADER, 1);
库( curl )
在这个库中,在幕后使用了相同的语法。如何直接向我公开语法?来自download.c
:
curl_easy_setopt(handle, CURLOPT_URL, NULL);
curl_easy_setopt(handle, CURLOPT_NOPROGRESS, 1);
curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, NULL);
curl_easy_setopt(handle, CURLOPT_WRITEDATA, NULL);
1条答案
按热度按时间pbossiut1#
本文档提到了curl包中的handle_data函数。
https://cran.r-project.org/web/packages/curl/curl.pdf
例如,假设您需要在阅读所有行之前查看状态代码、内容类型或其他标头,一旦您有了一个工作连接,R中的许多其他函数将接受......您可以使用各种
read.csv(x)
、read.delim(x)
、scan(x)
等等。