我在我的Ubuntu机器13.10上安装XML和RCurl时遇到了一些麻烦.我今天进行了所有sudo更新和升级.
我正试图用R拨浪鼓.我无法安装使用拨浪鼓所需的'XML'.这与一年后在这里提出的问题几乎是同一个问题.以下是我要回复的错误消息:
> install.packages("RCurl")
Installing package into ‘/home/steven/R/x86_64-pc-linux-gnu-library/3.0’
(as ‘lib’ is unspecified)
trying URL 'http://cran.rstudio.com/src/contrib/RCurl_1.95-4.1.tar.gz'
Content type 'application/x-gzip' length 870915 bytes (850 Kb)
opened URL
==================================================
downloaded 850 Kb
* installing *source* package ‘RCurl’ ...
** package ‘RCurl’ successfully unpacked and MD5 sums checked
checking for curl-config... no
Cannot find curl-config
ERROR: configuration failed for package ‘RCurl’
* removing ‘/home/steven/R/x86_64-pc-linux-gnu-library/3.0/RCurl’
Warning in install.packages :
installation of package ‘RCurl’ had non-zero exit status
The downloaded source packages are in …Run Code Online (Sandbox Code Playgroud) 我有一个手动过程,我通过curl将5-6 GB文件上传到Web服务器:
curl -X POST --data-binary @myfile.csv http://myserver::port/path/to/api
Run Code Online (Sandbox Code Playgroud)
这个过程很好,但是我喜欢用R自动化它.问题是,我要么不知道我在做什么,要么curl的R库不知道如何处理大于~2GB的文件:
library(RCurl)
postForm(
"http://myserver::port/path/to/api",
file = fileUpload(
filename = path.expand("myfile.csv"),
contentType = "text/csv"
),.encoding="utf-8")
Run Code Online (Sandbox Code Playgroud)
Yeilds Error: Internal Server Error
httr也不起作用:
library(httr)
POST(
url = "http://myserver:port/path/to/api",
body = upload_file(
path = path.expand("myfile.csv"),
type = 'text/csv'),
verbose()
)
Run Code Online (Sandbox Code Playgroud)
产量:
Response [http://myserver:port/path/to/api]
Date: 2015-06-30 11:11
Status: 400
Content-Type: <unknown>
<EMPTY BODY>
Run Code Online (Sandbox Code Playgroud)
httr对该verbose()选项提供了更多信息,告诉我:
-> POST http://myserver:port/path/to/api
-> User-Agent: libcurl/7.35.0 r-curl/0.9 httr/1.0.0
-> Host: http://myserver::port
-> Accept-Encoding: gzip, deflate
-> Accept: application/json, text/xml, application/xml, */* …Run Code Online (Sandbox Code Playgroud) 我正在尝试修复我公开提供的下载自动化脚本,以便任何人都可以使用R轻松下载世界价值观调查.
在此网页- http://www.worldvaluessurvey.org/WVSDocumentationWV4.jsp - PDF链接"WVS_2000_Questionnaire_Root"容易在Firefox和chrome.I下载无法弄清楚如何自动下载使用httr或RCurl或任何其它的R包.下面是Chrome互联网行为的截图.PDF链接需要跟进http://www.worldvaluessurvey.org/wvsdc/DC00012/F00001316-WVS_2000_Questionnaire_Root.pdf的最终来源,但如果直接点击它们,则会出现连接错误.我不清楚这是否与请求标头Upgrade-Insecure-Requests:1或响应标头状态代码有关302
点击新的worldvaluessurvey.org网站,使用chrome的inspect元素窗口打开让我觉得这里有一些hacky编码决策,因此标题半破:/
在过去,基础R download.file()无法使用HTTPS协议,因此必须使用RCurl.自R 3.3.0起:
所有版本都支持https:URL,默认方法是download.file(),url()和使用它们的代码.遗憾的是,无法保证可以访问任何特定的https:URL....不同的访问方法可能允许不同的协议或使用私有证书包...
的download.file() 帮助下仍然说道:
提供的包"RCurl"提供了更全面的URL下载工具.
其中(顺便提一下包括cookie和标题管理).
基于RCurl常见问题解答(查找"当我尝试通过https与URL进行交互时,我收到错误"),可以通过以下方式管理HTTPS URL:
getURL(url, cainfo="CA bundle")
Run Code Online (Sandbox Code Playgroud)
其中CA bundle是证书颁发机构捆绑文件的路径.一个这样的捆绑可以从卷曲网站本身获得:https:
//curl.haxx.se/ca/cacert.pem
测试基于Windows平台
对于许多HTTPS网站的 download.file()工作原理如下:
download.file(url="https://www.google.com", destfile="google.html")
download.file(url="https://curl.haxx.se/ca/cacert.pem", destfile="cacert.pem")
Run Code Online (Sandbox Code Playgroud)
关于RCurl,使用cacert.pem上面下载的包,可能会出现错误:
library(RCurl)
getURL("https://www.google.com", cainfo = "cacert.pem")
# Error in function (type, msg, asError = TRUE) :
# SSL certificate problem: unable to get local issuer certificate
Run Code Online (Sandbox Code Playgroud)
在这种情况下,只需删除对证书包的引用即可解决问题:
getURL("https://www.google.com") # works
getURL("https://www.google.com", ssl.verifypeer=TRUE) # works
Run Code Online (Sandbox Code Playgroud)
ssl.verifypeer = TRUE用于确保成功不是由于getURL()压制安全性.该论点记录在RCurl FAQ中 …
我试图从R中的github安装一个包,但是我收到以下错误:
> install_github("jmp75/rClr", build_vignettes=TRUE)
Downloading github repo jmp75/rClr@master
Error in curl::curl_fetch_memory(url, handle = handle) :
Peer certificate cannot be authenticated with given CA certificates
Run Code Online (Sandbox Code Playgroud)
我已经设置了RCurl选项:
options(RCurlOptions = c(getOption("RCurlOptions"), ssl.verifypeer = FALSE, ssl.verifyhost = FALSE ) )
Run Code Online (Sandbox Code Playgroud)
检查设置后:
getOption("RCurlOptions")
Run Code Online (Sandbox Code Playgroud)
我们看....
$cainfo
[1] "C:/_CODE/R/Library/RCurl/etc/ca-bundle.crt"
$ssl.verifypeer
[1] FALSE
$ssl.verifyhost
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
我仍然得到错误:
Downloading github repo jmp75/rClr@master
Error in curl::curl_fetch_memory(url, handle = handle) :
Peer certificate cannot be authenticated with given CA certificates
Run Code Online (Sandbox Code Playgroud)
任何线索
我将Tor与R结合使用,并希望为每个新请求更改我的IP.我的代码如下:
library(RCurl)
opts <- list(proxy="127.0.0.1", proxyport=8118)
for (i in 1:10)
{
con <- socketConnection(host="127.0.0.1",port=9051) # DOES NOT WORK
writeLines("signal newnym", con=con) # DOES NOT WORK
ip <- getURL("http://ifconfig.me/ip", .opts = opts)
print(ip)
Sys.sleep(1)
}
Run Code Online (Sandbox Code Playgroud)
我可以通过Tor连接,但是标记为"DOES NOT WORK"的两条线似乎没有得到正确的信号到Tor,所以IP保持不变.
问候!
我正在为http://asdfree.com/编写一组可自由下载的R脚本,以帮助人们分析英国数据服务托管的复杂样本调查数据.除了为这些数据集提供大量统计教程之外,我还想自动下载和导入此调查数据.为了做到这一点,我需要弄清楚如何以编程方式登录这个英国数据服务网站.
我已经尝试了许多不同的RCurl和httr配置来登录,但是我在某个地方犯了一个错误而且我被卡住了.我已经尝试检查这篇文章中概述的元素,但网站在浏览器中跳得太快,让我无法理解发生了什么.
这个网站确实需要登录名和密码,但我相信在进入登录页面之前我犯了一个错误.
起始页应为:https://www.esds.ac.uk/secure/UKDSRegister_start.asp
此页面将自动将您的Web浏览器重定向到以以下内容开头的长URL: https://wayf.ukfederation.org.uk/DS002/uk.ds?[blahblahblah]
(1)由于某种原因,SSL证书在本网站上不起作用.这是我发布的有关此问题的SO问题.我使用的解决方法是忽略SSL:
library(httr)
set_config( config( ssl.verifypeer = 0L ) )
Run Code Online (Sandbox Code Playgroud)
然后我在起始网站上的第一个命令是:
z <- GET( "https://www.esds.ac.uk/secure/UKDSRegister_start.asp" )
Run Code Online (Sandbox Code Playgroud)
这给了我一个z$url看起来很像https://wayf.ukfederation.org.uk/DS002/uk.ds?[blahblahblah]我的浏览器也重定向的页面.
然后,在浏览器中,您应该输入"英国数据存档"并单击continue按钮.当我这样做时,它会将我重定向到网页https://shib.data-archive.ac.uk/idp/Authn/UserPassword
我认为这是我被困的地方,因为我无法弄清楚如何followlocation在这个网站上获得cURL 和土地.注意:尚未输入用户名/密码.
当我使用wayf.ukfederation.org.uk页面中的httr GET命令时,如下所示:
y <- GET( z$url , query = list( combobox = "https://shib.data-archive.ac.uk/shibboleth-idp" ) )
Run Code Online (Sandbox Code Playgroud)
该y$url字符串看起来很像z$url(除非它有一个下拉框=上年底).有没有办法通过RCurl或httr进入此uk data …
我想从这个网页下载数据
数据很容易被删除rvest.
代码可能是这样的:
library(rvest)
library(pipeR)
url <- "http://www.tradingeconomics.com/"
css <- "#ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1"
data <- url %>>%
html() %>>%
html_nodes(css) %>>%
html_table()
Run Code Online (Sandbox Code Playgroud)
但是像这样的网页存在问题.
有一个+按钮显示所有国家/地区的数据,但默认值只是50个国家/地区的数据.
因此,如果我使用代码,我可以抓取50个国家/地区的数据.
该+按钮是在人的javascript,所以我想知道是否有在某种程度上R点击按钮,然后刮数据.
我正在尝试编写一个通过REST API访问某些数据的R包.但是,API不使用http身份验证,而是依赖cookie来保持会话的凭据.
本质上,我想用两个R函数替换bash脚本中的以下两行:一个用于执行登录,并存储会话cookie,第二个用于获取数据.
curl -X POST -c cookies.txt -d"username=xxx&password=yyy" http://api.my.url/login
curl -b cookies.txt http://api.my.url/data
Run Code Online (Sandbox Code Playgroud)
我显然不明白RCurl如何使用curl选项.我现在的脚本有:
library(RCurl)
curl <- getCurlHandle()
curlSetOpt(cookiejar='cookies.txt', curl=curl)
postForm("http://api.my.url/login", username='xxx', password='yyy', curl=curl)
getURL('http://api.my.url/data", curl=curl)
Run Code Online (Sandbox Code Playgroud)
最终getURL()失败并显示"未登录".来自服务器的消息,并且在postForm()没有cookies.txt文件之后.
现在整个世界都在努力使用SSL(这个决定很有意义)我们中的一些人使用github和相关服务来存储csv文件有一点挑战.从URL读取时,read.csv()函数不支持SSL.为了解决这个问题,我正在做一个小舞蹈,我喜欢称之为SSL歌舞伎舞蹈.我用RCurl抓取文本文件,将其写入临时文件,然后用read.csv()读取它.这样做有更顺畅的方法吗?更好的解决方案?
这是SSL kabuki的一个简单示例:
require(RCurl)
myCsv <- getURL("https://gist.github.com/raw/667867/c47ec2d72801cfd84c6320e1fe37055ffe600c87/test.csv")
temporaryFile <- tempfile()
con <- file(temporaryFile, open = "w")
cat(myCsv, file = con)
close(con)
read.csv(temporaryFile)
Run Code Online (Sandbox Code Playgroud)