从R调用API来检索数据
问题描述:
我试图从API中获取信息。我有卷曲声明可惜卷翘器其现在不是R. 我卷曲声明支持是:从R调用API来检索数据
curl -X GET "http://192.168.26.71:8080/recommender/containing/?
lat=5.010880470275879&lon=47.293949127197266&floor=0" -H "accept:
application/json"
我与下文提到的代码尝试;
library(RCurl)
library(RJSONIO)
postForm("http://192.168.26.71:8080/recommender/containing/",
.opts = list(postfields = toJSON(list('lat' = "5.010880470275879",
'lon' = "47.293949127197266", 'floor' = "0")),
httpheader = c('Content-Type' = 'application/json', Accept =
'application/json'),
ssl.verifypeer = FALSE))
但它给了我一个错误;
Error: Not Found
* Trying 192.168.26.71...
* Connected to 192.168.26.71 (192.168.26.71) port 8080 (#0)
> POST /recommender/containing/ HTTP/1.1
Host: 192.168.26.71:8080
Content-Type: application/json
Accept: application/json
Content-Length: 75
* upload completely sent off: 75 out of 75 bytes
< HTTP/1.1 404 Not Found
< Date: Tue, 17 Oct 2017 14:24:14 GMT
< Access-Control-Allow-Origin: *
< Access-Control-Request-Method: GET, PUT, POST, DELETE
< Access-Control-Allow-Headers: Location, Cache-Control, Pragma, Origin,
Authorization, Content-Type, X-Requested-With
< Access-Control-Expose-Headers: Location, Cache-Control, Pragma, Origin,
Authorization, Content-Type, X-Requested-With
< Content-Type: application/json
< Transfer-Encoding: chunked
< Server: Jetty(9.3.8.v20160314)
<
* Connection #0 to host 192.168.26.71 left intact
Error: Not Found
任何人都可以请帮助我吗?谢谢:)
答
嗯,你的命令行请求发出一个GET,但你的Rcurl代码调用postForm
这是一个POST请求。那些永远不会是一样的。更相似的通话将
my_url <- "http://192.168.26.71:8080/recommender/containing/?lat=5.010880470275879&lon=47.293949127197266&floor=0"
getURL(my_url,
httpheader = c(Accept = 'application/json'),
ssl.verifypeer = FALSE)
的RCurl
pacakge并没有真正似乎帮助构建URL。 urltools::param_set()
函数可能会有帮助。尽管现在用于制作http请求的更受欢迎的pacakge是httr
。您的请求看起来像这样
library(httr)
GET("http://192.168.26.71:8080/recommender/containing/",
query = list('lat' = "5.010880470275879",
'lon' = "47.293949127197266",
'floor' = "0"),
add_headers(Accept = "application/json"))
“not found”?启用CURLOPT_VERBOSE,并发布详细日志 – hanshenrik
感谢您的回复。但我猜R中没有CURLOPT_VERBOSE选项。 – Saara
RCurl是libcurl库的封装,对吧?如果它没有办法让你启用libcurl的CURLOPT_VERBOSE ... RCurl文档在哪里,它会是一个低劣的包装器? – hanshenrik