使用httr :: GET vs xmlParse截断URL

Chr*_*pel 3 xml r httr

我试图用两种不同的方法(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)

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

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

Nic*_*icE 5

您可以尝试用URL替换URL中的空格,+以防止它被截断:

httr_response <- GET(gsub(" ","+",request))
httr_content <- content(httr_response)

httr_content %>%
        xml_nodes(xpath = "//Result/Term") %>%
        xml_text 

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

关于空间和URL更多信息点击这里