googleapis / googleapis/google-http-java-client

Apache HTTP client does not support GET requests with content

未关闭
#1,442 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
type: feature request
主要语言
Java
星标
1.4k
派生
473
PR 合并指标
30 天内没有已合并 PR

描述

I'm trying to update a resource with `google-cloud-compute-1.3.0`, the client does this using `HTTP PATCH`. This is not supported with the default `NetHttpTransport` (#1316): https://github.com/googleapis/google-http-java-client/blob/7ebc6ca7807424b6372f1b52ac7b129752a9acf5/google-http-client/src/main/java/com/google/api/client/http/javanet/NetHttpTransport.java#L68-L76

To workaround that, I set the HTTP transport to `ApacheHttpTransport`, but then other requests fail with
```
Caused by: java.lang.IllegalStateException: Apache HTTP client does not support GET requests with content.
at com.google.common.base.Preconditions.checkState(Preconditions.java:469)
at com.google.api.client.util.Preconditions.checkState(Preconditions.java:113)
at com.google.api.client.http.apache.v2.ApacheHttpRequest.execute(ApacheHttpRequest.java:60)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1012)
at com.google.api.gax.httpjson.HttpRequestRunnable.run(HttpRequestRunnable.java:143)
... 6 more
```
This precondition is run when `getContentStreaming() != null`: https://github.com/googleapis/google-http-java-client/blob/7ebc6ca7807424b6372f1b52ac7b129752a9acf5/google-http-client-apache-v2/src/main/java/com/google/api/client/http/apache/v2/ApacheHttpRequest.java#L59-L71
but in this case `getContentStreaming()` is returning an `com.google.api.client.http.EmptyContet` due to https://github.com/googleapis/gax-java/pull/648

I think this precondition needs to be relaxed and be in-line with `NetHttpTransport`, which does support `GET` requests with non-null `getContentStreaming()`.

#### Environment details

1. Specify the API at the beginning of the title. For example, "BigQuery: ...").
`google-cloud-compute-1.3.0`
2. OS type and version: RHEL 8.3
3. Java version: 11.0.10
4. google-http-client version(s): 1.39.2

#### Code example

```java
TransportChannelProvider transportChannelProvider = InstantiatingHttpJsonChannelProvider.newBuilder().setHttpTransport(new ApacheHttpTransport()).build();
ImagesSettings settings = ImagesSettings.newBuilder().setTransportChannelProvider(transportChannelProvider).build();
try (ImagesClient client = ImagesClient.create(settings)) {
client.list("centos-cloud");
}
```
Will fail with the stacktrace above. Removing either `.setTransportChannelProvider()` or `.setHttpTransport()` (so that it defaults to `NetHttpTransport`) will fix this issue (but then PATCH doesn't work).

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。