R XML包:如何设置用户代理?

发布于 2024-12-02 19:57:40 字数 250 浏览 1 评论 0原文

我已经确认 XML 函数(例如 htmlParse 和 readHTML)的 R 调用会向服务器发送一个空白的用户代理字符串。

?XML::htmlParseisURL 下告诉我“libxml 解析器处理与服务器的连接,而不是 R 设施”。这是否意味着无法设置用户代理?

(我确实尝试了 options(HTTPUserAgent="test") 但这没有被应用。)

I've confirmed that R calls of XML functions such as htmlParse and readHTML send a blank user agent string to the server.

?XML::htmlParse tells me under isURL that "The libxml parser handles the connection to servers, not the R facilities". Does that mean there is no way to set user agent?

(I did try options(HTTPUserAgent="test") but that is not being applied.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

青朷 2024-12-09 19:57:40

马特的回答是完全正确的。至于下载到字符串/字符向量,
您可以使用 RCurlgetURLContent() (或适当时使用 getForm()postForm())。
通过这些功能,您可以对 HTTP 请求进行巨大的控制,包括能够设置用户代理和标头中的任何字段。 如此。

 x = getURLContent("http://biostatmatt.com", useragent = "BioStatMatt-via-R", 
                      followlocation = TRUE)
 htmlParse(x, asText = TRUE)  # or htmlParse(I(x))

工作也是

Matt's answer is entirely correct. As for downloading to a string/character vector,
you can use RCurl and getURLContent() (or getForm() or postForm() as appropriate).
With these functions, you have immense control over the HTTP request, including being able to set the user-agent and any field in the header. So

 x = getURLContent("http://biostatmatt.com", useragent = "BioStatMatt-via-R", 
                      followlocation = TRUE)
 htmlParse(x, asText = TRUE)  # or htmlParse(I(x))

does the job.

缺⑴份安定 2024-12-09 19:57:40

XML::htmlParse 使用 libxml 工具( NanoHTTP)通过 GET 方法获取 HTTP 内容。默认情况下,NanoHTTP 不发送 User-Agent 标头。尽管可以将任意标头字符串传递给较低级别​​的 NanoHTTP 函数(例如 xmlNanoHTTPMethod),但没有 libxml API 将用户代理字符串传递给 NanoHTTP。因此,需要对源代码进行大量修改才能在 XML 包中实现这一点。

或者,options(HTTPUserAgent="test") 为使用 R 工具进行 HTTP 请求的函数设置 User-Agent 标头。例如,可以像这样使用 download.file

options(HTTPUserAgent='BioStatMatt-via-R')
download.file('http://biostatmatt.com/', destfile='biostatmatt.html')
XML::htmlParse('biostatmatt.html')

(Apache 风格)访问日志条目如下所示:

160.129.***.*** - - [01/Sep/2011:20:16:40 +0000] "GET / HTTP/1.0" 200 4479 "-" "BioStatMatt-via-R"

XML::htmlParse uses the libxml facilities (i.e. NanoHTTP) to fetch HTTP content using the GET method. By default, NanoHTTP does not send a User-Agent header. There is no libxml API to pass a User-Agent string to NanoHTTP, although one can pass arbitrary header strings to lower-level NanoHTTP functions, like xmlNanoHTTPMethod. Hence, it would require significant source code modification in order to make this possible in the XML package.

Alternatively, options(HTTPUserAgent="test") sets the User-Agent header for functions that use the R facility for for HTTP requests. For example, one could use download.file like so:

options(HTTPUserAgent='BioStatMatt-via-R')
download.file('http://biostatmatt.com/', destfile='biostatmatt.html')
XML::htmlParse('biostatmatt.html')

The (Apache style) access log entry looks something like this:

160.129.***.*** - - [01/Sep/2011:20:16:40 +0000] "GET / HTTP/1.0" 200 4479 "-" "BioStatMatt-via-R"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文