使用html_session()时,如何删除Content-Type标头?

时间:2017-04-02 01:56:41

标签: r rvest

我已成功运行此代码一段时间了:

pgsession <- html_session("https://example.com")
pgform <- html_form(pgsession)[[1]]
filledForm <- set_values(pgform, "userid" = "usr", "password" = "pwd")
submit_form(pgsession, filledForm)
x <-jump_to(pgsession, url)

然而,它刚刚破产;看起来页面已更新?无论如何,我得到“ 错误:当前页面似乎不是html ”。

我在code for html_session() on github中搜索过,我认为问题是缺少Content-Type标题。

我尝试手动添加标题:

  if(is.null(pgsession$response$headers$`Content-Type`)) {
    pgsession$response$headers$`Content-Type` <- "text/html; charset=utf-8"
  }

但它不起作用。可能是首先更新响应头的错误方法,但我想不出其他任何事情要做。

有人可以帮忙吗?感谢。

更新

嗯,根据下面的反馈,我尝试将httr::content_type("text/html")添加到html_session()调用,但它似乎没有向标题添加任何内容。我也看得更近了,看到了一个<nav>元素。所以我现在看到页面是HTML 5.然后我通过在线HTML验证器运行它。有错误,但它们似乎很小。

rvest不支持HTML 5吗?我有v0.3.2,这似乎是最新的。我应该直接切换到使用httr吗?我需要登录并导航,所以rvest看起来非常方便。

1 个答案:

答案 0 :(得分:0)

经过更多的研究和实验,我发现问题确实是rvest的html_form()在内部检查Content-Type标头,以便将hmtl_session中的HTML声明为有效。这当然不适用于使用<meta>标记的HTML 5。

结论:在修复此问题之前,html_form()不支持没有Content-Type标头的HTML 5。

我向rvest here报告了这个问题,其中还包含一个解决方法。