我试图通过R中的REST API使用Azure存储.我正在使用httr覆盖Curl 的包.
您可以使用R-fiddle:http://www.r-fiddle.org/#/fiddle?id = vh8uqGmM
library(httr)
requestdate<-format(Sys.time(),"%a, %d %b %Y %H:%M:%S GMT")
url<-"https://preconstuff.blob.core.windows.net/pings?restype=container&comp=list"
sak<-"Q8HvUVJLBJK+wkrIEG6LlsfFo19iDjneTwJxX/KXSnUCtTjgyyhYnH/5azeqa1bluGD94EcPcSRyBy2W2A/fHQ=="
signaturestring<-paste0("GET",paste(rep("\n",12),collapse=""),
"x-ms-date:",requestdate,"
x-ms-version:2009-09-19
/preconstuff/pings
comp:list
restype:container")
headerstuff<-add_headers(Authorization=paste0("SharedKey preconstuff:",
RCurl::base64(digest::hmac(key=sak,
object=enc2utf8(signaturestring),
algo= "sha256"))),
`x-ms-date`=requestdate,
`x-ms-version`= "2009-09-19")
Run Code Online (Sandbox Code Playgroud)
试图列出blob:
content(GET(url,config = headerstuff, verbose() ))
Run Code Online (Sandbox Code Playgroud)
在HTTP请求'Q8HvUVJLBJK + wkrIEG6LlsfFo19iDjneTwJxX /KXSnUCtTjgyyhYnH/5azeqa1bluGD94EcPcSRyBy2W2A/fHQ =='中找到的MAC签名与任何计算签名不同.
[1] "<?xml version=\"1.0\" encoding=\"utf-8\"?><Error>
<Code>AuthenticationFailed</Code><Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.\nRequestId:1ab26da5-0001-00dc-6ddb-15e35c000000\nTime:2015-03-26T17:51:42.7190620Z</Message>
<AuthenticationErrorDetail>The MAC signature found in …Run Code Online (Sandbox Code Playgroud) 我需要使用不同的"密钥"访问同一网页,以获取它提供的特定内容.
我有一个键列表,x我使用包中的GET命令httr来访问网页,然后检索我需要的信息y.
library(httr)
library(stringr)
library(XML)
for (i in 1:20){
h1 = GET ( paste0("http:....categories=&query=", x[i]),timeout(10))
par = htmlParse(file = h1)
y[i]=xpathSApply(doc = par, path = "//h3/a" , fun=xmlValue)
}
Run Code Online (Sandbox Code Playgroud)
问题是经常会达到超时,并且会中断循环.
因此,如果达到超时,我想刷新网页或重试GET命令,因为我怀疑问题出在我试图访问的网站的互联网连接上.
我的代码工作方式,超时打破了循环.我需要忽略错误并转到下一次迭代或重试访问该网站.
我正在尝试使用Github访问私有存储库httr.如果我添加我的github令牌(存储为环境变量GITHUB_TOKEN),我可以毫无问题地执行此操作:
httr::GET("https://api.github.com/repos/aammd/miniature-meme/releases/assets/2859674",
httr::write_disk("test.rds", overwrite = TRUE),
httr::progress("down"),
httr::add_headers(Authorization = paste("token", Sys.getenv("GITHUB_TOKEN"))))
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试指定另一个标头,我会收到错误.在这种情况下,我想下载与发布相关联的二进制文件("资产",在github术语中):
httr::GET("https://api.github.com/repos/aammd/miniature-meme/releases/assets/2859674",
httr::write_disk("test.rds", overwrite = TRUE),
httr::progress("down"),
httr::add_headers(Authorization = paste("token", Sys.getenv("GITHUB_TOKEN"))),
httr::add_headers(Accept = "application/octet-stream"))
?xml version="1.0" encoding="UTF-8"?>
<Error><Code>InvalidArgument</Code><Message>Only one auth mechanism allowed; only the X-Amz-Algorithm query parameter, Signature query string parameter or the Authorization header should be specified</Message>
Run Code Online (Sandbox Code Playgroud)
这只是消息的一部分(其余包括我的令牌).
显然我的授权被发送了两次!我怎么能阻止这个?它与...有关httr::handle_pool()
看来原始请求收到一个包含签名的回复.然后将此签名与我的令牌一起发回,从而导致错误.这些人也发生了类似的事情
-> GET /repos/aammd/miniature-meme/releases/assets/2859674 HTTP/1.1
-> Host: api.github.com
-> User-Agent: libcurl/7.43.0 r-curl/2.3 httr/1.2.1.9000
-> Accept-Encoding: gzip, deflate
-> Authorization: …Run Code Online (Sandbox Code Playgroud) 我设法使用网站 api 从瑞典统计局检索了一些数据。这个问题的答案解决了我的大部分问题。
如何以不太详细的方式发布 JSON 格式的请求以从 R 中的 URL 获取 JSON 数据到 data.frame 中?
但我仍然有两个问题。
如果我的 json 问题中有带有变音符号的字符(如“Å”、“Ä”、“Ö”),我会从服务器收到“404”响应。
我正在尝试从此表下载数据:
按地区、就业、年龄和性别划分的 16 岁以上人口 (RAMS)。2004 - 2015 年
(点击“Continue”,然后点击“api for this table”就可以查询到网站上的api,但是必须把响应格式从“px”改为“json”。)
此代码有效:
library(jsonlite)
library(httr)
bodytxt <- '{
"query": [
{
"code": "Region",
"selection": {
"filter": "vs:RegionKommun07",
"values": [
"0114",
"1280"
]
}
},
{
"code": "Alder",
"selection": {
"filter": "item",
"values": [
"16-19"
]
}
},
{
"code": "Tid",
"selection": {
"filter": "item",
"values": [
"2015"
]
}
}
],
"response": …Run Code Online (Sandbox Code Playgroud) 我试图从这个网站上抓取数据,使用httr和rvest。经过多次抓取(大约 90 - 100 次),该网站会自动将我转移到另一个带有验证码的网址。
这是正常的网址: "https://fs.lianjia.com/ershoufang/pg1"
这是验证码网址: "http://captcha.lianjia.com/?redirect=http%3A%2F%2Ffs.lianjia.com%2Fershoufang%2Fpg1"
当我的蜘蛛遇到验证码网址时,它会告诉我停止并在浏览器中解决它。然后我在浏览器中手动解决它。但是当我运行蜘蛛并发送GET请求时,蜘蛛仍然被转移到验证码网址。同时在浏览器中,一切正常,即使我输入验证码网址,它也会将我转回浏览器中的正常网址。
即使我使用代理,我仍然遇到同样的问题。在浏览器中,我可以正常浏览网站,而蜘蛛一直在转移到验证码网址。
我想知道,
谢谢。
这是我的代码:
a <- GET(url, use_proxy(proxy, port), timeout(10),
add_headers('User-Agent' = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',
'Connection' = 'keep-alive',
'Accept-Language' = 'en-GB,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,en-US;q=0.2,fr;q=0.2,zh-TW;q=0.2',
'Accept-Encoding' = 'gzip, deflate, br',
'Host' = 'ajax.api.lianjia.com',
'Accept' = '*/*',
'Accept-Charset' = 'GBK,utf-8;q=0.7,*;q=0.3',
'Cache-Control' = 'max-age=0'))
b <- a %>% read_html %>% html_nodes('div.leftContent') %>% html_nodes('div.info.clear') %>%
html_nodes('div.title') %>% html_text() …Run Code Online (Sandbox Code Playgroud) 我想使用 trelloR 包管理我的 Trello 卡和板,但是当我尝试使用该get_token功能创建令牌时,我在浏览器上收到一条错误消息:“无效的 return_url”。
my_token <- get_token(key = my_key, secret = my_secret)
Run Code Online (Sandbox Code Playgroud)
my_key是我的个人 Trello API 密钥,my_secret是我的 OAuth 秘密。我在 Trello 页面上找到了它们,该页面会在登录后为您提供身份验证代码:https : //trello.com/app-key
要使用 Trello API 并访问板,我需要一个令牌。此令牌由 httr 包使用 OAuth1.0 生成。事实上,功能get_token做这样的事情,根据的Jakub Chromec,作者和trelloR的维护者在这里:
my_token <- get_token(key = my_key, secret = my_secret)
Run Code Online (Sandbox Code Playgroud)
当我get_token用我的个人密钥和秘密执行这段代码或函数时,我被重定向到我的浏览器,这是正常的。如本页所述,应该会出现一个屏幕,要求我允许进行身份验证。但相反,我在浏览器中只有一条错误消息:“无效的 return_url”。
在 RStudio 控制台中,这仍然显示:
trello.app = httr::oauth_app(
appname = "trello-app",
key = my_key,
secret = my_secret)
trello.urls = httr::oauth_endpoint(
request = "OAuthGetRequestToken",
authorize ="OAuthAuthorizeToken?scope=read&expiration=30days&name=trello-app", …Run Code Online (Sandbox Code Playgroud) 我正在学习如何使用 R 中的 API 获取数据。我知道其目的httr是为curl 包提供一个包装器。\n我为了向 API 发出请求而遵循的文档具有以下 HTTP 请求格式。下面的代码将用于生成令牌
curl -s \\\n -d "client_id=clientid\xe2\x80\x9d \\\n -d "username=user\xe2\x80\x9d \\\n -d "password=pwd\xe2\x80\x9d \\\n -d "grant_type=password" \\\n -d "scope=openid email" \\\n "https://auth.com/token"\nRun Code Online (Sandbox Code Playgroud)\n\n之后,我将使用令牌通过此请求与 API 进行通信
\n\ncurl --header "Content-Type: application/json" \\\n --header "Accept: application/+json" \\\n --header "Authorization: Bearer token_goes_here\xe2\x80\x9c \\\n --request GET \\\n --url "https://api-sitename.org/sections?parent_id=0"\nRun Code Online (Sandbox Code Playgroud)\n\n最初,我在终端中运行这两个请求,它们成功了,我收到了 JSON 格式的响应。我的问题是,如何在 R 脚本中运行这些请求,以便获得响应并将它们存储在 R studio 全局环境中?我的目标是最终将数据集从API加载到Rstudio工作环境中。\nT
\n您将如何SOAP使用 R 请求 EUR-Lex 的 API?
EUR-Lex 是一个包含许多法律行为的欧盟数据库。在他们的 Web 服务手册中,他们描述了他们的SOAP系统,但没有描述如何使用 R。我已经尝试了一段时间就业httr,RCurl但没有成功。我想使用 R 而不是 SOAPUI。
这里有人有这方面的经验吗?
从下面的链接中,我应该按如下方式定义正文吗?
body <- "<sear:searchRequest>
<sear:expertQuery>${expert query}</sear:expertQuery> <sear:page>${page}</sear:page>
<sear:pageSize>${pageSize}</sear:pageSize> <sear:searchLanguage>${search language
</sear:searchLanguage>
</sear:searchRequest>"
Run Code Online (Sandbox Code Playgroud)
然后我如何将其与 结合起来headerfields使用RCurl或httr包?
以下三个答案似乎相关,但我不知道如何将它们应用到我的 EUR-Lex 示例中:
EUR-Lex API 链接:
我正在尝试使用 r 和 httr 访问domain.com.au api。我可以使用 API 密钥来实现此目的,但不能使用 OAuth2
该文档表明:
通过客户端凭证获取访问令牌 使用您的 client_id 和 client_secret 以及您需要的范围列表向https://auth.domain.com.au/v1/connect/token端点发出 POST 请求。请参阅 API 参考,了解每个端点所需的范围列表。尝试使用计划中未包含的范围将导致 400 invalid_scope 错误。该请求必须使用基本身份验证进行身份验证,其中 client_id 和 client_secret 分别对应于用户名和密码。
https://developer.domain.com.au/docs/v2/authentication/oauth/client-credentials-grant
卷曲的实现很简单:
curl -X POST -u 'clientid:secret' -H "Content-Type: application/x-www-form-urlencoded" -d 'grant_type=client_credentials&scope=api_listings_read%20api_agencies_read' 'https://auth.domain.com.au/v1/connect/token'
Run Code Online (Sandbox Code Playgroud)
它返回令牌而不进行任何重定向。
但是,我无法将其转换为等效的 httr POST 请求来获取令牌。我目前拥有的是:
oep <- oauth_endpoint(base_url = "https://auth.domain.com.au/v1/connect/token",
request = NULL,
access = "access_token" )
myapp <- oauth_app("domain",
key = "client_id_here",
# The secret isn't secrete. A user still has to authenticate when redirected.
secret = …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试从国际货币基金组织的贸易统计方向下载特定系列,以计算国家之间的贸易量。有一个 r-packageimfr在这方面做得非常出色。然而,当我选择特定的一组时,我遇到了问题。
这段代码工作得很好,并为我提供了我感兴趣的五个国家的完整数据系列:
\nlibrary(imfr)\n\n# get the list of imf datasets \nimf_ids()\n\n# I am interested in direction of trade "DOT", so check the list of codes that are in the datastructure\nimf_codelist(database_id = "DOT")\n\n# I want the export and import data between countries FOB so "TXG_FOB_USD" and "TMG_FOB_USD"\nimf_codes("CL_INDICATOR_DOT")\n\n# works nicely for exports:\ndata_list_exports <- imf_data(database_id = "DOT", indicator = c("TXG_FOB_USD"), \n country = c("US","JP","KR"), \n start = "1995",\n return_raw = TRUE, \n freq = "A")\n\n# however the same code …Run Code Online (Sandbox Code Playgroud)