Clojure Gebäude der URL Bestandteile
In Python würde ich das folgende tun:
>>> q = urllib.urlencode({"q": "clojure url"})
>>> q
'q=clojure+url'
>>> url = "http://stackoverflow.com/search?" + q
>>> url
'http://stackoverflow.com/search?q=clojure+url'
Wie mache ich alle die Codierung, die für mich getan oben in Clojure? In anderen Worten, wie mache ich so etwas wie die folgenden:
=> (build-url "http://stackoverflow.com/search" {"q" "clojure url"})
"http://stackoverflow.com/search?q=clojure+url"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Möglichkeit:
Ich weiß, das ist nicht genau das gleiche wie Ihre Python-snippet, obwohl. Bitte sehen Sie sich den folgenden Beitrag aus der Clojure-mailing-Liste für eine vollständige Antwort:
http://www.mail-archive.com/[email protected]/msg29338.html
Den code von dort wird Ihnen erlauben, dies zu tun:
Named
-handling-version, so dass ich verlassen bin, dass hier. 🙂Es ist ein
url-encode
- Funktion in der Ring-sring.util.codec
namespace:Ich bin mir nicht sicher ob es eine vorgefertigte Funktion ein, um eine Karte in einen query-string, aber vielleicht könnte dies der job:
Beispiel:
Alles, was bleibt, ist die Verkettung das Ergebnis wird an das Ende der URL:
Scheint zu funktionieren:
Update:
Vielleicht eine modifizierte version machen könnte, für eine Clojure-freundliche Erfahrung. Behandelt auch die Codierung über ein Ring-Stil optionales argument mit utf-8 als Standard.
So, jetzt können wir tun
ring.util.codec
nimmt auch einen optionalen encoding argument, säumigeUTF-8
.Dies ist der genaue REPL äquivalent zu Ihrem python-session, mit clj-http.
aber clj-http macht es noch einfacher:
unter der Annahme, dass Sie möchten, führen Sie eine GET-Anforderung ist.
clj-apache-http ist ziemlich nützlich. Mit es können Sie Folgendes tun:
Eine einfache Lösung mit str(ings):
+
als eine Eingabe, so dass Sie nicht wirklich lassen Clojure Kodieren Sie die Zeichenfolge für Sie.