我是Clojure的新手,并且想知道我是否正确设置了curl调用。在文件的名称空间中,我定义了用于将clojure.java.shell运行为变量sh的用法,然后使用命令curl和完整的URL调用sh至以执行GET curl请求。
ns my-exercise.search
(:require [hiccup.page :refer [html5]])
(:use [clojure.java.shell :only [sh]]))
(def response (sh "curl" completeURL))
(println response)
在终端中打印响应时,我会得到一个表,该表看起来包含响应性能的数据。但是,输出是空的parens。
我在终端中收到响应后,是否可以正确调用curl命令?
{:exit 0, :out (), :err % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2 100 2 0 0 7 0 --:--:-- --:--:-- --:--:-- 7
}
如果是这样,那么我还有另一个问题。我收到一个空的paren作为输出响应。即使当我使用邮递员拨打电话时,我也会收到状态200,数据为空。这是否表示api没有向我发送信息?
我的最后一个问题,可以说我确实可以使它正常工作并获得带有输出的响应。如何获得该输出并将其分配给变量?
谢谢!
这是我的方法:
(defn run-shell-cmd
"Run a command represented as a string in an OS shell (default=/bin/bash).
Example: 'ls -ldF *' "
[cmd-str]
(let [result (shell/sh *os-shell* "-c" cmd-str)]
(if (= 0 (t/safe-> :exit result))
result
(throw (RuntimeException.
(str "shell-cmd: clojure.java.shell/sh failed. \n"
"cmd-str:" cmd-str "\n"
"exit status:" (:exit result) "\n"
"stderr:" (:err result) "\n"
"result:" (:out result) "\n"
))))))
(let [result (run-shell-cmd "ls -al")]
(newline)
(println :ls-cmd)
(println result))
结果:
:ls-cmd
{:exit 0, :out total 176
drwxrwxr-x 8 alan alan 4096 Mar 14 13:46 .
drwxr-xr-x 155 alan alan 4096 Mar 28 17:27 ..
drwxrwxr-x 8 alan alan 4096 Mar 28 17:29 .git
尝试curl
:
(let [result (run-shell-cmd "curl http://www.google.com")]
(newline)
(println :curl-cmd)
(println result))
)
结果:
:curl-cmd
{:exit 0, :out <!doctype html><html itemscope=""
itemtype="http://schema.org/WebPage" lang="en"><head><meta content="Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for."
name="description"><meta content="noodp" name="robots">
....<snip>
如果您不想自己动手,可以在此处找到上述便利功能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句