标签: httr

如何在 R 中跟踪 url 的任何重定向?

假设我有以下网址:

http://linkinghub.elsevier.com/retrieve/pii/S1755534516300379

当我将其输入到我的标准桌面浏览器时,我被重定向到:

http://www.sciencedirect.com/science/article/pii/S1755534516300379?via%3Dihub

但是,我无法在 R 中实现这一点。我尝试了 httr 和 RCurl 包。在httr的文档中,它说函数GET的使用如下:

library(httr)
GET("http://linkinghub.elsevier.com/retrieve/pii/S1755534516300379")
Run Code Online (Sandbox Code Playgroud)

应该会导致实际使用的网址(在任何重定向之后)。但是调用url时:

GET("http://linkinghub.elsevier.com/retrieve/pii/S1755534516300379")$url
Run Code Online (Sandbox Code Playgroud)

我没有得到最终的重定向。我非常感谢您的帮助!

r rcurl httr

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

使用 readxl 和 httr/libxls 错误将 Excel 文件读入 R:无法打开文件

我想使用 Excel 文件的 url从网站链接中读取 Excel 文件的工作表 1 。我在 Windows 10,R 3.6.1 上。

我正在尝试使用readxl 包中的 Read Excel file from a URL 中的代码,并且还检查了使用 readxl R 将 excel 文件读取到单个数据帧中

url = 'https://dataverse.harvard.edu/file.xhtml?  persistentId=doi:10.7910/DVN/WEGWGS/I11K9Y&version=1.0'
GET(url, write_disk(tf <- tempfile(fileext = ".xls")))
df <- read_excel(tf, 1L)


# Error message
libxls error: Unable to open file
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

libxls 错误:无法打开文件

谢谢你的帮助!

url excel r httr readxl

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

将“原始”xlsx 文件从 httr 响应读取到数据帧中

我正在使用 httr 包通过其 REST API 从我们的报告系统检索数据。我将内容指定为 xlsx。响应包含原始(二进制?)文件。

我的请求如下所示:

request = GET("http://server/.../documents/123456", 
             add_headers(.headers = c('Accept'= 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 
                                      'authtoken' = paste0('', logonToken,''))) ,
             content_type("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"),
             encode = 'raw'
)

content(request)
[1] 50 4b 03 04 0a 00 08 08 08 00 19 88 79 54 00 00 00 00 00 00 00
[44] 2f 73 68 65 65 74 31 2e 78 6d 6c a5 57 5b 6f 9b 30 14 7e 9f b4
[87] 00 23 43 2f db af 9f c1 94 …
Run Code Online (Sandbox Code Playgroud)

r httr

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

使用r httr从Google搜索中搜索网址

我想从Google网络搜索中获取以下网址:

library(httr)
search.term="httr+package+daterange:%3A2456294-2456659"
url.name=paste0("https://www.google.com/search?q=",search.term)
url.get=GET(url.name)
url.content=content(url.get)
Run Code Online (Sandbox Code Playgroud)

然后尝试从结果中获取链接失败:

links <- xpathApply(url.content, "//h3//a[@href]", function(x) xmlAttrs(x)[[1]])
Error in UseMethod("xpathApply") : 
no applicable method for 'xpathApply' applied to an object of class "XMLDocumentContent"
Run Code Online (Sandbox Code Playgroud)

从url.content中获取链接的最佳方法是什么?

xml r rcurl httr

2
推荐指数
1
解决办法
3301
查看次数

这个卷曲请求的R等价物是什么

我有一个请求,在curl这样的

curl -H "Content-Type:application/json"             \
     -X GET 127.0.0.1:8084/clusterpredict/byheaders \
     -v                                             \
     -b "text1"                                     \
     -A "text2"
Run Code Online (Sandbox Code Playgroud)

如何在R中执行相同的操作RCurlhttr在R中执行相同的操作?

curl r rcurl httr

2
推荐指数
1
解决办法
1074
查看次数

使用httr包,设置标题名称为变量的标题

我想使用R httr包在请求中设置标题并设置标题,当我在变量中有标题的名称时.

我想做这样的事情:

tokenName = 'X-Auth-Token'

get_credentials_test <- function (token) {

  url <- paste(baseUrl,"/api/usercredentials", sep = '')
  r <- GET(url, add_headers(tokenName = token))
  r
}
Run Code Online (Sandbox Code Playgroud)

但是,上面的代码似乎设置了一个名为tokenName的标头.

如果我执行以下操作,它确实有效:

get_credentials_test <- function (token) {

   url <- paste(baseUrl,"/api/usercredentials", sep = '')
   r <- GET(url, add_headers('X-Auth-Token' = token))
   r
}
Run Code Online (Sandbox Code Playgroud)

但是如果标题的名称发生变化并且添加标题的要求大量洒在代码周围,我想要有一些灵活性.我不确定是否可以添加包含变量的头,但这是我想要做的.

r httr

2
推荐指数
1
解决办法
3206
查看次数

如何在rvest html_session中发帖?

如何在html会话中发布"内部"?

所以在我开了一个会话之后 a <- rvest::html_session(url)

我试过了:

library(httr)
POST(path, 
          add_headers(setNames(as.character(headers(a)), names(headers(a)))), 
          set_cookies(setNames(cookies(a)$value, cookies(a)$name)),
          body = list(...), 
          encode = "json")
Run Code Online (Sandbox Code Playgroud)

但这会处理我的请求,因为我没有登录.有什么建议吗?我正在寻找类似的东西POST(session, path, body, ...)

r web-scraping httr rvest

2
推荐指数
1
解决办法
1810
查看次数

在POST请求中使用JSON数组

我正在编写一个API 包装器来使用httr包查询英国邮政编码,当我使用GET请求时一切正常.在使用POST请求时我有点迷失.

以下是API 的文档说明:

接受包含邮政编码数组的JSON对象.返回匹配的邮政编码和相应的可用数据列表.

最多可接受100个邮政编码.

POST https://api.postcodes.io/postcodes?q=[postcode]

发布数据

此方法需要包含要发布的邮政编码数组的JSON对象.例如

{"postcodes":["PR3 0SG","M45 6GN","EX165BL"]}

我尝试了以下方法:

library(httr)

pc_json <- '{
  "postcodes" : ["PR3 0SG", "M45 6GN", "EX165BL"]
}'

r <- POST(paste0("https://api.postcodes.io/postcodes?q=", pc_json, encode = "json"))
Run Code Online (Sandbox Code Playgroud)

但它返回这个:

$ status 1 400

$ error 1 "提交的JSON无效.您需要提交带有一组邮政编码或地理位置对象的JSON对象"

修剪数组并使用它时会发生同样的情况:

r <- POST("https://api.postcodes.io/postcodes?q=EX165BL")
content(r)
Run Code Online (Sandbox Code Playgroud)

在这里这里读了类似的线程,但是他们没有让我的问题更容易解决.

任何想法如何解决它?

post json r http httr

2
推荐指数
1
解决办法
4717
查看次数

使用package httr从Web API获取数据

我一直在尝试访问用于生物信息目的的在线API.API在他们的网站上列出了使用curl的示例.他们使用的例子是:

$ curl --data "method=smm&sequence_text=SLYNTVATLYCVHQRIDV&allele=HLA-A*01:01&length=9" http://tools-cluster-interface.iedb.org/tools_api/mhci/
Run Code Online (Sandbox Code Playgroud)

使用在线unix终端,我可以得到正确的输出: Unix curl输出

我尝试使用httr设置R脚本:

library(httr)
url="http://tools-cluster-interface.iedb.org/tools_api/mhci/"
results=POST(url,body="method=smm&sequence_text=SLYNTVATLYCVHQRIDV&allele=HLA-A*01:01&length=9")
content(results,"text")
Run Code Online (Sandbox Code Playgroud)

但是,我得到的结果不包含有用的信息

[1] "Available methods:\nann\ncomblib_sidney2008\nconsensus\nnetmhccons\nnetmhcpan\nnetmhcstabpan\npickpocket\nrecommended\nsmm\nsmmpmbec\n\n* Please go to the link below for usage info:\nhttp://tools.iedb.org/main/html/tools_api.html\n"
Run Code Online (Sandbox Code Playgroud)

我只想知道1)如果我的脚本是用curl反映他们的API方法的正确方法吗?2)如何在R中使用他们的api?

r bioinformatics httr

2
推荐指数
1
解决办法
322
查看次数

从终端工作获取但是httr :: GET没有

我正在尝试从服务器下载栅格httr::GET.我们过去常常这样做,但是对服务器进行了一些更改,现在它不起作用.

通过浏览器或通过终端中的GET(ubuntu 16.04)使用URL工作正常并返回一个正常工作的tif栅格.但使用相同的网址httr::GET是行不通的Status: 400.

我唯一的猜测是它与数据的编码有关.但我真的不确定.

file <- paste0(tempdir(), '/file.tif')
r <- 
  httr::GET('https://map.ox.ac.uk/geoserver/Explorer/ows?service=WCS&version=2.0.1&request=GetCoverage&format=image/geotiff&coverageid=2015_Nature_Africa_PR&SUBSET=Long(-3,50.483779907)&SUBSET=Lat(-25.6089496609999,-11.9454326629999)&SUBSET=time(\"2015-01-01T00:00:00.000Z\")',
           httr::write_disk(file, overwrite = TRUE))

ras <- raster::raster(file)

# I'm now totally confused about when and where quotes are escaped, so just to make sure...
r <- 
  httr::GET('https://map.ox.ac.uk/geoserver/Explorer/ows?service=WCS&version=2.0.1&request=GetCoverage&format=image/geotiff&coverageid=2015_Nature_Africa_PR&SUBSET=Long(-3,50.483779907)&SUBSET=Lat(-25.6089496609999,-11.9454326629999)&SUBSET=time("2015-01-01T00:00:00.000Z")',
            httr::write_disk(file, overwrite = TRUE))

ras <- raster::raster(file)

# But just putting the url in the browser works fine.
# https://map.ox.ac.uk/geoserver/Explorer/ows?service=WCS&version=2.0.1&request=GetCoverage&format=image/geotiff&coverageid=2015_Nature_Africa_PR&SUBSET=Long(-3,50.483779907)&SUBSET=Lat(-25.6089496609999,-11.9454326629999)&SUBSET=time("2015-01-01T00:00:00.000Z")

# eg 
# rr <- raster::raster('~/Desktop/2015_Nature_Africa_PR3.tif')


# And using the URL with GET in the …
Run Code Online (Sandbox Code Playgroud)

r httr

2
推荐指数
1
解决办法
81
查看次数

标签 统计

httr ×10

r ×10

rcurl ×3

bioinformatics ×1

curl ×1

excel ×1

http ×1

json ×1

post ×1

readxl ×1

rvest ×1

url ×1

web-scraping ×1

xml ×1