2013-09-08 1 views
2

Я пытаюсь очистить содержимое веб-страницы, используя функцию html-ресурса enlive, но я получаю ответ 403, потому что я не из браузера. Думаю, это может быть отменено в Java (найдено ответ here), но я хотел бы увидеть способ clojure для решения этой проблемы. Возможно, этого можно добиться, предоставив параметры функции html-resource, но я не нашел примера того, как и что нужно передать в качестве параметра. Любое предложение будет принята с благодарностью.Обратный код ответа: 403 для URL с clojure enlive

Спасибо.

+1

Правильно вам нужно что-то вроде clj-http или http-kit, который позволяет вам контролировать соединение, где вы можете предоставить некоторые настройки, получить ответ и подать на (html-resource). – Chiron

+1

html-resource - это мультиметод, где вы можете передать ему объект URL. https://github.com/cgrand/enlive/blob/master/src/net/cgrand/enlive_html.clj#L112 Это хороший момент, когда вы можете установить «пользовательский агент» для вашего объекта соединения с URL. – Chiron

ответ

6

Enlive's 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)) 

Хотя, это может выглядеть лучше отщепляются в свою собственную функцию.

+0

Спасибо за ваш ответ, я попробую. –

+0

Это сработало довольно хорошо. Еще раз спасибо. –