标签: httr

如何构建httr POST请求以返回站点数据?

我在从以下网站提取数据时遇到问题.如果我通过我的浏览器访问long_url,我可以看到我要抓的表,但是如果我使用httr从R中调用url,我要么没有将数据返回给我,要么我不明白如何它正在归还给我.

base_url <- "http://web1.ncaa.org/stats/exec/records"
long_url <- "http://web1.ncaa.org/stats/exec/records?academicYear=2014&sportCode=MFB&orgId=721"

library(XML)
library(httr)
library(rvest) # devtools::install_github("hadley/rvest")
Run Code Online (Sandbox Code Playgroud)

这些POST请求的结果与我相同,

doc <- POST(base_url, query = list(academicYear = "2014", sportCode = "MFB",
                                         orgId = "721"))
doc <- POST(long_url)

class(doc)
Run Code Online (Sandbox Code Playgroud)

两个POST请求都返回200的状态代码,doc的类是"HTMLInternalDocument"和"XMLInternalDocument",这是允许我刮取页面的普通R对象.但是接下来的rvest和XML函数都是空的,尽管我知道url上有一个表.

 table <- html_nodes(doc, css = "td")
 table <- readHTMLTable(doc)
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解释一下我的httr请求丢失了吗?我也试过没有运气的GET请求.

r http-post httr

4
推荐指数
1
解决办法
3345
查看次数

从网络源获取 R 中的数据作为数据框

我正在尝试使用 RCurl 包将一些空气污染背景数据作为 data.frame 直接加载到 R 中。

有问题的网站在下载 .csv 文件之前有 3 个下拉框可供选择,如下图所示:

在此处输入图片说明

我试图从下拉框中选择 3 个值,然后使用“下载 CSV”按钮将数据作为 data.frame 直接下载到 R 中。

我想下载特定站点的多年和多种污染物的不同组合。

在 StackOverflow 上的其他帖子中,我遇到getForm了 RCurl 包中的函数,但我不明白如何使用此函数控制 3 个下拉框。

数据源的 URL 是:http : //uk-air.defra.gov.uk/data/laqm-background-maps?year= 2011

csv r httr

4
推荐指数
1
解决办法
988
查看次数

为 curl 请求构建等效的 R 请求

我有以下curl要求:

curl --request GET --header "key: value" http://urlhere
Run Code Online (Sandbox Code Playgroud)

如何在 R 中运行请求?

curl r rcurl httr

4
推荐指数
1
解决办法
2247
查看次数

httr :: POST中查询和正文之间的区别

我想在url中传递几个post参数,比如两个参数p1和p2.p1和p2的值是xyz(字符串)和1(数字).以下命令有什么区别:

POST(url, body=list(p1="xyz",p2=1))
Run Code Online (Sandbox Code Playgroud)

要么

POST(url, query=list(p1="xyz",p2=1))
Run Code Online (Sandbox Code Playgroud)

我也无法理解是否应该使用参数p1和p2的引用.如果是,那么单,双.

post r http httr

4
推荐指数
2
解决办法
1357
查看次数

如何使用 httr 为基于证书的身份验证指定证书、密钥和根证书?

我正在尝试使用 httr 库从需要基于证书的身份验证的服务器访问数据。我有证书 (cert.pem)、密钥文件 (key.pem) 和根证书 (caroot.pem)

以下 curl 有效。

curl -H "userName:sriharsha@rpc.com" --cert cert.pem --key certkey.key --cacert caroot.pem https://api.somedomain.com/api/v1/timeseries/klog?limit= 1

如何指定 certkey.key 和 caroot.pem 到 httr GET 请求。我正在尝试使用以下 R 命令,但找不到指定证书密钥和 caroot 的选项。

咖啡馆=????r<-GET(" https://api.somedomain.com/api/v1/timeseries/klog ", query = list(limit = 1), add_headers("userName"="sriharsha@rpc.com"), config (cainfo = cafile,ssl_verifypeer=FALSE),详细())

因此,我正在为 curl 的(--cert、--key 和--cacert)寻找 httr 的等效选项。

r client-certificates rcurl httr

4
推荐指数
1
解决办法
2581
查看次数

您能否将表示 RDS 文件的 R 原始向量转换回 R 对象,而无需往返磁盘?

我有一个已上传的 RDS 文件,然后通过curl::curl_fetch_memory()(via httr) 下载 - 这为我提供了 R 中的原始向量。

有没有办法读取表示 RDS 文件的原始向量以返回原始 R 对象?或者总是必须先将其写入磁盘?

我有一个类似于下面的设置:

saveRDS(mtcars, file = "obj.rds")
# upload the obj.rds file 
...
# download it again via httr::write_memory()
...

obj
#   [1] 1f 8b 08 00 00 00 00 00 00 03 ad 56 4f 4c 1c 55 18 1f ca 02 bb ec b2 5d 
# ...
is.raw(obj)
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)

它似乎readRDS()应该用于解压缩它,但它需要一个连接对象,而且我不知道如何从 R 原始向量创建连接对象 -rawConnection()看起来很有希望,但给出了:

rawConnection(obj)
#A connection with                           
#description …
Run Code Online (Sandbox Code Playgroud)

r rcurl httr raw

4
推荐指数
1
解决办法
563
查看次数

使用 R 从 API 中检索图片

我从未使用过 API,所以这是我的第一次尝试,我什至不知道我正在尝试做的事情是否可行。

我正在尝试从 SwissBioPics API ( https://www.npmjs.com/package/%40swissprot/swissbiopics%2Dvisualizer )获取细胞图片并将它们放在我的 R 会话中。

res <-  httr::GET('https://www.swissbiopics.org/static/swissbiopics.js',
                     query = list(taxisid = '9606', sls= 'SL0073',gos = '0005641'))
result <- httr::content(res$content)


Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

Error in httr::content(res$content) : is.response(x) is not TRUE
Run Code Online (Sandbox Code Playgroud)

有什么线索吗?

api json r httr

4
推荐指数
1
解决办法
172
查看次数

未能通过httr :: user_agent设置用户代理

在尝试通过MS Windows上httr::user_agenthttr::GET()呼叫更改用户代理时,我需要考虑一些特殊问题吗?我正在使用R-3.1.0httr 0.3.

按照示例?user_agent,我得到了这些结果:

url_this <- "http://httpbin.org/user-agent"
Run Code Online (Sandbox Code Playgroud)

标准用户代理:

GET(url_this)   
Response [http://httpbin.org/user-agent]
  Status: 200
  Content-type: application/json
{
  "user-agent": "curl/7.19.6 Rcurl/1.95.4.1 httr/0.3"
} 
Run Code Online (Sandbox Code Playgroud)

修改的用户代理:

GET(url_this, user_agent("Mozilla/5.0"))
Response [http://httpbin.org/user-agent]
  Status: 200
  Content-type: application/json
{
  "user-agent": "curl/7.19.6 Rcurl/1.95.4.1 httr/0.3"
}
Run Code Online (Sandbox Code Playgroud)

我曾预料到第二次调用会返回更接近我url_this在浏览器中访问时所获得的内容:

{
  "user-agent": "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0"
}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?也先跑setInternet2(TRUE),但结果相同.

user-agent r httr

3
推荐指数
1
解决办法
2528
查看次数

使用httr :: GET vs xmlParse截断URL

我试图用两种不同的方法(xmlParse和httr :: GET)请求一个XML文档,并期望响应是相同的.我用xmlParse得到的响应是我所期望的但是使用httr :: GET我的请求URL在某些时候会被截断.

一个例子:

require(httr)
require(XML)
require(rvest)

term <- "alopecia areata"
request <- paste0("http://eutils.ncbi.nlm.nih.gov/entrez/eutils/egquery.fcgi?term=",term)  

#requesting URL with XML
xml_response <- xmlParse(request)

xml_response %>%
        xml_nodes(xpath = "//Result/Term") %>%
        xml_text 
Run Code Online (Sandbox Code Playgroud)

这应该返回

[1] "alopecia areata"        
Run Code Online (Sandbox Code Playgroud)

现在为httr

httr_response <- GET(request)
httr_content <- content(httr_response)

httr_content %>%
        xml_nodes(xpath = "//Result/Term") %>%
        xml_text 
Run Code Online (Sandbox Code Playgroud)

这回来了

[1] "alopecia"
Run Code Online (Sandbox Code Playgroud)

有趣的是:如果我们检查请求的URL的httr_response元素,那是正确的.只有回应是错误的.

> httr_response$request$opts$url

[1] "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/egquery.fcgi?term=alopecia areata"

> httr_response$url

[1] "http://eutils.ncbi.nlm.nih.gov/gquery?term=alopecia&retmode=xml"
Run Code Online (Sandbox Code Playgroud)

所以在某些时候我的查询词被截断了.如果将整个请求手动放入浏览器,则其行为与预期一致.

任何建议如何解决这个问题将不胜感激.

xml r httr

3
推荐指数
1
解决办法
184
查看次数

- 用户卷曲等效于httr

我想,这是一些非常简单的卷曲代码,我试图将其翻译成httr格式.

curl -X POST \
  --user '<email>:<password>' \
  --header 'user-key: <user_key>' \
  --url https://api.m.com/v1/clients
Run Code Online (Sandbox Code Playgroud)

到目前为止我已经尝试过

library(httr)    
POST(url = "https://api.m.com/v1/clients",
                 add_headers('user-key' = "userkey",
                             user = 'email:password'))
Run Code Online (Sandbox Code Playgroud)

但没有成功.这里有什么错误吗?--user在curl代码中是否有等效的httr ?

curl r httr

3
推荐指数
1
解决办法
870
查看次数

标签 统计

httr ×10

r ×10

rcurl ×3

curl ×2

api ×1

client-certificates ×1

csv ×1

http ×1

http-post ×1

json ×1

post ×1

raw ×1

user-agent ×1

xml ×1