【问题标题】:Handling response code: 403 for URL with clojure enlive处理响应代码:403 用于带有 clojure enlive 的 URL
【发布时间】:2013-09-08 12:15:33
【问题描述】:

我正在尝试使用 enlive 的 html-resource 函数抓取网页的内容,但我收到了 403 响应,因为我不是来自浏览器。我想这可以在 Java 中被覆盖(找到答案 here ) ,但我希望看到一个处理这个问题的 clojure 方法。也许这可以通过向 html-resource 函数提供参数来实现,但我没有遇到过如何以及需要作为参数传递什么的示例。任何建议将不胜感激。

谢谢。

【问题讨论】:

  • 你需要像 clj-http 或 http-kit 这样的东西来控制连接,你可以在其中提供一些设置,获取响应并提供给(html-resource)
  • html-resource 是一种多方法,您可以在其中将 URL 对象传递给它。 github.com/cgrand/enlive/blob/master/src/net/cgrand/… 这是一个很好的点,您可以将“用户代理”设置为您的 URL 连接对象。

标签: java http clojure http-status-code-403 enlive


【解决方案1】:

Enlive 的html-resource 不提供覆盖默认请求属性的方法。您可以像您找到的其他答案一样,自己打开连接并将生成的InputStream 传递给html-resource

类似下面的东西可以处理它:

(with-open [inputstream (-> (java.net.URL. "http://www.example.com/")
                            .openConnection
                            (doto (.setRequestProperty "User-Agent"
                                                       "Mozilla/5.0 ..."))
                            .getContent)]
  (html-resource inputstream))

不过,将其拆分成自己的功能可能看起来会更好。

【讨论】:

  • 感谢您的回复,我试试看。
猜你喜欢
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 2017-02-08
相关资源
最近更新 更多