java - 我有 curl 命令它在 cmd 中工作正常,但我想在 java 代码中运行它
问题描述
我有 curl 命令它在 cmd 中工作正常,但我想在 java 代码中运行它。主要的 bout 命令是它正在调用一个“POST”API,它也需要身份验证。我也使用过调试器,它不会进入循环来读取响应
String[] command = {"curl",url, "-H" ,"Content-Type: application/x-www-form-urlencoded","-X", username+ "&" + password ,"insecure"};
ProcessBuilder process = new ProcessBuilder(command);
Process p;
try
{
p = process.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
StringBuilder builder = new StringBuilder();
String line="" ;
while ( (line = reader.readLine()) != null) {
builder.append(line);
System.out.println(line);
builder.append(System.getProperty("line.separator"));
}
String result = builder.toString();
System.out.print(result);
}
curl ' https://integration.sirionlabs.office:9443/nifi-api/access/token ' -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' --data 'username=username&password=password' --compressed --insecure
预期的结果是我需要的不记名令牌
解决方案
在我写这个答案的那一刻,Unirest是最常见的 Java HTTP 客户端之一。
这是您在 Java中使用Unirest显示的 cURL 命令示例。
由于 cURL 中的 --insecure 标志,代码有点棘手,这是在 Unirest 中获得类似结果的可能解决方案之一(来源:https ://github.com/Kong/unirest-java/issues/70 ):
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import javax.net.ssl.SSLContext;
import javax.security.cert.CertificateException;
import javax.security.cert.X509Certificate;
import org.apache.http.client.HttpClient;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContextBuilder;
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.JsonNode;
import com.mashape.unirest.http.Unirest;
import com.mashape.unirest.http.exceptions.UnirestException;
public class UnirestCertificateIgnore {
private static HttpClient unsafeHttpClient;
static {
try {
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy() {
public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
return true;
}
}).build();
unsafeHttpClient = HttpClients.custom().setSSLContext(sslContext)
.setSSLHostnameVerifier(new NoopHostnameVerifier()).build();
} catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) {
e.printStackTrace();
}
}
public static HttpClient getClient() {
return unsafeHttpClient;
}
public static void main(String[] args) {
try {
HttpClient creepyClient = RestUnirestClient.getClient();
Unirest.setHttpClient(creepyClient);
HttpResponse<String> response = Unirest.get("https://integration.sirionlabs.office:9443/nifi-api/access/token")
.header("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
.header("cache-control", "no-cache")
.body("username=username&password=password")
.asString();
} catch (UnirestException e) {
e.printStackTrace();
}
}
}
推荐阅读
- laravel - 操作总是返回未经授权的
- c - 从输入文件读取数据并放入数组的函数
- mysql - Why is my SQL query not using the table's composite index?
- javascript - 浏览器语言。奇怪的行为 - Javascript
- c# - 将xml反序列化为对象列表
- php - Unable to convert xml into html when passing from a laravel controller
- c# - SQL 代理 - Zipfile.ExtractToDirectory 不起作用
- python - 在 chrome 调试模式下 Selenium-webdriver 打开的现有浏览器会话中打开网页
- python - Return only the first word from a sentence and all other unique words from text file?
- javascript - array.map() - currentValue and index parameters switched?