如何构造httr POST请求以返回站点数据?

如何构造httr POST请求以返回站点数据?,r,http-post,httr,R,Http Post,Httr,我无法从以下网站获取数据。如果我通过浏览器访问long_url,我可以看到我想要刮取的表,但是如果我使用httr从R中调用url,我要么没有得到返回给我的数据,要么我不理解它是如何返回给我的 base_url <- "http://web1.ncaa.org/stats/exec/records" long_url <- "http://web1.ncaa.org/stats/exec/records?academicYear=2014&sportCode=MFB&o

我无法从以下网站获取数据。如果我通过浏览器访问long_url,我可以看到我想要刮取的表,但是如果我使用httr从R中调用url,我要么没有得到返回给我的数据,要么我不理解它是如何返回给我的

base_url <- "http://web1.ncaa.org/stats/exec/records"
long_url <- "http://web1.ncaa.org/stats/exec/records?academicYear=2014&sportCode=MFB&orgId=721"

library(XML)
library(httr)
library(rvest) # devtools::install_github("hadley/rvest")

base\u url您在这里遇到的问题实际上是一个非常常见的问题
httr
使用
RCurl
进行重型起重。
RCurl
在GET或POST请求中发送的默认用户代理头是
NULL
,这经常会混淆脚本。这就是为什么您的浏览器和
httr(…)
会得到不同的结果。如果你欺骗了一个有意义的用户代理,你就会得到你想要的结果

base_url <- "http://web1.ncaa.org/stats/exec/records"
ua       <- "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0"
library(httr)
library(XML)
doc <- POST(base_url, 
            query = list(academicYear = "2014", sportCode = "MFB",orgId = "721"),
            user_agent(ua))

html <- content(doc, useInternalNodes=T)
df.list <- readHTMLTable(html)
df      <- df.list[[4]]
head(df)
#    Opponent  Game Date Air ForceScore OppScore  Loc Neutral SiteLocation GameLength Attend
# 1   Colgate 08/31/2013             38       13 Home                               - 32,095
# 2  Utah St. 09/07/2013             20       52 Home                               - 32,716
# 3 Boise St. 09/13/2013             20       42 Away                               - 36,069
# 4   Wyoming 09/21/2013             23       56 Home                               - 35,389
# 5    Nevada 09/28/2013             42       45 Away                               - 24,545
# 6      Navy 10/05/2013             10       28 Away                               - 38,225

base\u url FYI httr确实设置了用户代理。@hadley真的吗?为了什么?在这种情况下,您知道为什么OP的代码不起作用,但显式设置用户代理会起作用吗?它会将其设置为类似于
httr/RCurl/R
,因此如果服务器正在进行UA嗅探,则它与已知的任何内容都不匹配。
 table <- html_nodes(doc, css = "td")
 table <- readHTMLTable(doc)
base_url <- "http://web1.ncaa.org/stats/exec/records"
ua       <- "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0"
library(httr)
library(XML)
doc <- POST(base_url, 
            query = list(academicYear = "2014", sportCode = "MFB",orgId = "721"),
            user_agent(ua))

html <- content(doc, useInternalNodes=T)
df.list <- readHTMLTable(html)
df      <- df.list[[4]]
head(df)
#    Opponent  Game Date Air ForceScore OppScore  Loc Neutral SiteLocation GameLength Attend
# 1   Colgate 08/31/2013             38       13 Home                               - 32,095
# 2  Utah St. 09/07/2013             20       52 Home                               - 32,716
# 3 Boise St. 09/13/2013             20       42 Away                               - 36,069
# 4   Wyoming 09/21/2013             23       56 Home                               - 35,389
# 5    Nevada 09/28/2013             42       45 Away                               - 24,545
# 6      Navy 10/05/2013             10       28 Away                               - 38,225