URL 被 httr::GET vs xmlParse 截断
URL gets truncated with httr::GET vs xmlParse
我正在尝试使用两种不同的方法(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
这个returns,应该
[1] "alopecia areata"
现在为 httr
httr_response <- GET(request)
httr_content <- content(httr_response)
httr_content %>%
xml_nodes(xpath = "//Result/Term") %>%
xml_text
这个returns
[1] "alopecia"
有趣的是:如果我们检查请求的 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"
所以在某些时候我的查询词被截断了。如果手动将整个请求放入浏览器,它的行为符合预期。
如有任何解决此问题的建议,我们将不胜感激。
您可以尝试将 URL 中的 space 替换为 +
以防止它被截断:
httr_response <- GET(gsub(" ","+",request))
httr_content <- content(httr_response)
httr_content %>%
xml_nodes(xpath = "//Result/Term") %>%
xml_text
#[1] "alopecia areata"
有关 space 和 URL 的更多信息 here
我正在尝试使用两种不同的方法(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
这个returns,应该
[1] "alopecia areata"
现在为 httr
httr_response <- GET(request)
httr_content <- content(httr_response)
httr_content %>%
xml_nodes(xpath = "//Result/Term") %>%
xml_text
这个returns
[1] "alopecia"
有趣的是:如果我们检查请求的 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"
所以在某些时候我的查询词被截断了。如果手动将整个请求放入浏览器,它的行为符合预期。
如有任何解决此问题的建议,我们将不胜感激。
您可以尝试将 URL 中的 space 替换为 +
以防止它被截断:
httr_response <- GET(gsub(" ","+",request))
httr_content <- content(httr_response)
httr_content %>%
xml_nodes(xpath = "//Result/Term") %>%
xml_text
#[1] "alopecia areata"
有关 space 和 URL 的更多信息 here