为什么我在终端和 Java 中使用 运行 curl 命令时得到不同的结果?
Why am I obtaining different results when running curl command from Terminal and in Java?
我在 Java 或其衍生物中学到了很多对 运行 curl
的建议。例如, using curl command in Java等
此外,我已经弄清楚如何 fetch the metadata of a given resource using 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}
运行 这个 curl 命令在 Groovy
回收本站分享的一些代码,我写了如下过程。
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()
我得到的是 HTML 中的整个页面,而不是我期望的 BibTeX 格式的表格。
问题是:我做错了什么?你们中有人遇到过这个问题吗?
使用 exec
不是 shell - 你不能也不必为
a shell,那是不存在的。更多 exec(String)
默认使用
一个字符串分词器(基本上在空格处分割)来制作它
对于任何稍微高级的用例特别无用。
你最好总是使用接受的版本
命令的字符串数组 (+ args).
你在哪里有效调用看起来像这样(注意,
命令在空格处被分割——所以我使用 \'
来制作我的 shell
忽略那个):
# 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}
}
如果您需要“shell-isms”,请改用["sh", "-c", command]
。
我在 Java 或其衍生物中学到了很多对 运行 curl
的建议。例如
此外,我已经弄清楚如何 fetch the metadata of a given resource using 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}
运行 这个 curl 命令在 Groovy
回收本站分享的一些代码,我写了如下过程。
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()
我得到的是 HTML 中的整个页面,而不是我期望的 BibTeX 格式的表格。
问题是:我做错了什么?你们中有人遇到过这个问题吗?
使用 exec
不是 shell - 你不能也不必为
a shell,那是不存在的。更多 exec(String)
默认使用
一个字符串分词器(基本上在空格处分割)来制作它
对于任何稍微高级的用例特别无用。
你最好总是使用接受的版本 命令的字符串数组 (+ args).
你在哪里有效调用看起来像这样(注意,
命令在空格处被分割——所以我使用 \'
来制作我的 shell
忽略那个):
# 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}
}
如果您需要“shell-isms”,请改用["sh", "-c", command]
。