curl
Javaまたはその派生物で実行するための多くの提案を学びました。たとえば、Javaでのcurlコマンド、Javaでのcurlコマンドの使用などです。
また、DOIを使用して特定のリソースのメタデータをフェッチする方法を理解しました。この命令から、Javaで小さなスニペットを使用してこのcurlコマンドを実行し、結果を処理することに非常に興味があります。
例を挙げましょう。URLはhttp://dx.doi.org/10.1016/j.immuni.2015.09.001
です。
ターミナルからcurlコマンドを実行する
curl -LH "Accept: application/x-bibtex" http://dx.doi.org/10.1016/j.immuni.2015.09.001
出力は次のようになります
@article{Biswas_2015,
doi = {10.1016/j.immuni.2015.09.001},
url = {https://doi.org/10.1016%2Fj.immuni.2015.09.001},
year = 2015,
month = {sep},
publisher = {Elsevier {BV}},
volume = {43},
number = {3},
pages = {435--449},
author = {Subhra~K. Biswas},
title = {Metabolic Reprogramming of Immune Cells in Cancer Progression},
journal = {Immunity}
Groovyでこのcurlコマンドを実行する
このサイトで共有しているいくつかのコードをリサイクルして、私は以下のようにプロセスを書きました。
Map result = [:]
String command = "curl -LH 'Accept: application/x-bibtex' http://dx.doi.org/10.1016/j.immuni.2015.09.001"
Process process = Runtime.getRuntime().exec(command)
InputStream stream = process.getInputStream()
result.put("data", stream.text)
process.destroy()
私が得ているのは、BibTeX形式のフォームではなく、ページ全体がHTMLであるということです。
問題は、ここで何が間違っているのかということです。その問題を経験したことがある人はいますか?
使用exec
はシェルではありません-シェルを引用することはできませんし、引用する必要もありません。それはありません。さらにexec(String)
、デフォルトで文字列トークナイザー(基本的に空白で分割される)を使用して、少し高度なユースケースでは特に役に立たないようにします。
ほとんどの場合、コマンドに文字列配列(+ args)を受け入れるバージョンを使用することをお勧めします。
効果的に呼び出すと、次のようになります(コマンドは空白で分割されることに注意してください。その\'
ため、シェルにそれを無視させていました)。
# curl -LH \'Accept: application/x-bibtex\' http://dx.doi.org/10.1016/j.immuni.2015.09.001
curl: (6) Could not resolve host: application
... HTML ...
groovyを使用した最短ルートは次のようになります(exec
文字列の配列を渡すためのバージョンもあることに注意してください)。
groovy:000> ["curl", "-LH", "Accept: application/x-bibtex", "http://dx.doi.org/10.1016/j.immuni.2015.09.001"].execute().text
===> @article{Biswas_2015,
9doi = {10.1016/j.immuni.2015.09.001},
9url = {https://doi.org/10.1016%2Fj.immuni.2015.09.001},
9year = 2015,
9month = {sep},
9publisher = {Elsevier {BV}},
9volume = {43},
9number = {3},
9pages = {435--449},
9author = {Subhra~K. Biswas},
9title = {Metabolic Reprogramming of Immune Cells in Cancer Progression},
9journal = {Immunity}
}
「シェルイズム」が必要な場合は、["sh", "-c", command]
代わりに使用してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加