我在某个地方读到 goole 只允许获取。这是否意味着无法将 org.apache.http.client.HttpClient 集成到 google appe 引擎中?
如果没有,是否有使用 org.apache.http.client.HttpClient 在 google app engine 上使用现有库的替代方法?
我在某个地方读到 goole 只允许获取。这是否意味着无法将 org.apache.http.client.HttpClient 集成到 google appe 引擎中?
如果没有,是否有使用 org.apache.http.client.HttpClient 在 google app engine 上使用现有库的替代方法?
是的,你确实可以。我刚刚尝试过,它在 Java 8 环境下也能正常工作。
脚步:
启用billing,否则native
HttpURLConnection
将不起作用(这也是 Apache HttpClient 的基础)。如果不计费,您只能使用urlfetch
2016 年上一篇文章中描述的旧版。
在 Java 8 环境中是可选的,因为native
是默认的
appengine-web.xml
:
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<url-stream-handler>native</url-stream-handler>
</appengine-web-app>
try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
HttpPost httpPost = new HttpPost("http://myservice.com");
httpPost.setEntity(new StringEntity(objectMapper.writeValueAsString(input), ContentType.APPLICATION_JSON));
CloseableHttpResponse response = httpclient.execute(httpPost);
return objectMapper.readValue(response.getEntity().getContent(), new TypeReference<MyReturnType>() { });
} catch (IOException e) {
throw new RuntimeException(e);
}
所以答案不是。您需要使用 google fetch 库。
来自Wayback Machine存档的Google Code 上的 Google App Engine wiki 页面:
唯一受支持的 HTTP 传输是基于 Google App Engine SDK 中 URL Fetch Java API 的UrlFetchTransport
不要尝试ApacheHttpTransport,因为它在 Google App Engine 上肯定会失败。