2010-03-29 1 views
2

Je suis en train de se lever une course en utilisant http://github.com/rnewman/clj-apache-httpComment m'authentifier auprès d'un serveur proxy à partir de clj-apache-http?

(http/get (java.net.URI. url) 
     :headers {"User-Agent" user-agent} 
     :parameters (http/map->params 
       {:default-proxy (http/http-host :host "localhost" 
           :port 8888)}) 
     :as :string) 

Le problème est, mon proxy (calmars) requiert une authentification. Comment puis-je "alimenter" mon nom d'utilisateur/mot de passe dans cette bibliothèque?

Merci!

Répondre

0

clj-apache-http dispose d'un filtre de préemption-basic-auth que vous pouvez utiliser. Il prend en charge les chaînes de nom d'utilisateur/mot de passe combinées de ce formulaire "nom: mot de passe". L'utilisation de la fonction n'est pas bien documentée mais peut être trouvée here. Exemple (non testé):

(http/get (java.net.URI. url) 
    :headers {"User-Agent" user-agent} 
    :parameters (http/map->params 
      {:default-proxy (http/http-host :host "localhost" 
          :port 8888)}) 
    :as :string 
    :filters ((preemptive-basic-auth-filter "name:password"))) 
+1

Je ne pense pas que preemptive-basic-auth-filter fonctionnera car il envoie les en-têtes pour WWW-Authorization au lieu de Proxy-Authorization. – erikcw

+0

Juste au cas où quelqu'un d'autre se réfèrerait à cela, les filtres devraient être une séquence de fonctions, donc ce devrait être: filters [(preemptive-basic-auth-filter "nom: mot de passe")] – colinf

2

Ajouter ce qui suit à mon dictionnaire entêtes fait l'affaire:

"Proxy-Authorization" (str "Basic " 
          (base64/encode-str "username:password")) 

Comme dit Mac - cela pourrait aussi être mis en œuvre avec un filtre - mais préemptive-base -auth-filter ne fonctionnera pas car il envoie les en-têtes pour l'autorisation WWW au lieu de l'autorisation proxy.

Questions connexes