enn*_*nth 5 javascript java multithreading apache-httpclient-4.x
我目前正在学习 Java 中的线程。我想知道在 Java 中发出 Http 请求时的标准协议是什么,它类似于我下面的代码,它使用 Javascript Fetch API 和异步编程。例如,如果我在 Javascript 中使用 Fetch API首先发出GET请求,从 REST 端点获取一些数据,稍后我将使用该数据发出POST请求(如下面的代码所示),我需要使用回调函数或Promise(如下所示)等待第一个请求检索到第二个请求的数据,然后继续。显然,如果我没有使用 Promises 或将第二个 Http POST嵌套在下面的第一个 Fetch 方法 ( GET ) 中,并编写了两个单独的 Fetch API 调用(一个用于GET,一个用于POST,顺序一个接一个又名从上到下) ),两个调用都会同时“触发”,并且第二个POST请求将没有成功POST所需的数据。
const myHttpGETandPOSTmethod = () => {
// First Http request goes here
fetch('http://example.com/movies.json', {
method: 'GET',
headers: // Some headers here,
})
.then(response => response.json())
.then(data => {
console.log(data))
// Nest the second Http request inside here. It only runs after 1st request completes
return fetch('http://example.com/movies.json', {
method: 'POST',
headers: // Some headers here,
body: JSON.stringify(body);
})
.then((response) => response.json())
.then((data) => {
console.log('Success:', data);
})
.catch((error) => {
console.error('Error:', error);
});
})
}
Run Code Online (Sandbox Code Playgroud)
那么,如果我在 Java 中使用Apache HttpClient https://hc.apache.org/httpcomponents-client-4.5.x/quickstart.html库之类的东西,标准过程是否是“启动”另一个线程(除了主线程)执行GET请求,然后执行thread.join(),以便在第一个线程完成后,第二个请求可以触发自己的线程?
我是否需要使用Callable而不是Runnable以便保存第一个GET请求的 HttpEntity 数据响应?
我想我只是想了解实现上面提出的关于发出后续 POST 请求所需的 HTTP GET 请求的场景的最佳方法,同时两者都是异步触发的,这样它们就不会阻塞主线程。
您可以使用 apache Http Library发出基本的GET请求( POST也非常相似):
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet("http://targethost/homepage");
CloseableHttpResponse response1 = httpclient.execute(httpGet);
try {
System.out.println(response1.getStatusLine());
HttpEntity entity1 = response1.getEntity();
// Save the response body to a string
String body = EntityUtils.toString(entity1, StandardCharsets.UTF_8);
System.out.println(body);
EntityUtils.consume(entity1);
} finally {
response1.close();
}
Run Code Online (Sandbox Code Playgroud)
或者我在这里采取了错误的方法并错误地看待这个问题?我相信 Apache 中的 Http 库提供同步和异步 Http 调用?或者我应该在 Java 中使用更新的 Http 库?