如何在代理后面使用 Apache Olingo
How to use Apache Olingo behind a proxy
即使我在代理后面,我也可以使用不同的浏览器并使用 Postman 成功访问以下 OData 服务:
String SERVICE_ROOT =
http://services.odata.org/V4/TripPinService/
但是,在 Java 中使用 Apache Olingo 我无法访问此服务。
-Dhttp.proxySet=true -Dhttp.proxyHost=http-proxy.example.com -Dhttp.proxyPort=8080
等 JVM 参数允许我执行基本的 URL 功能,例如检索 HTTP 状态代码 (google returns 200
)。然而,使用 ODataClient 访问 OData 服务是不可能的(下面的代码)。不会抛出任何错误。
ODataClient client = ODataClientFactory.getClient();
ODataServiceDocumentRequest request = client.getRetrieveRequestFactory().getServiceDocumentRequest(SERVICE_ROOT);
ODataRetrieveResponse<ClientServiceDocument> response = request.execute();
我尝试在 Olingo 中使用代理功能,但没有成功:
client.getConfiguration().setHttpClientFactory(new ProxyWrappingHttpClientFactory(URI.create("http://http-proxy.example.com:8080")));
我做错了什么,我还有什么选择?
非常感谢。
如果您使用 NTLM 代理,您可以尝试使用 NTLMAuthHttpClientFactory。
NTLMAuthHttpClientFactory ntlm = new NTLMAuthHttpClientFactory(username, password, workstation, domain);
client.getConfiguration().setHttpClientFactory(ntlm);
万一不行,你可以试试cntlm。安装它,在 C:\Program Files (x86)\Cntlm\cntlm.ini
中更改用户名、密码、域和代理,然后调用 net start cntlm
。
将此用于 Olingo:
client.getConfiguration().setHttpClientFactory(new ProxyWrappingHttpClientFactory(URI.create("http://localhost:3128")));
我自己解决了这个问题。在 VM 参数中,我现在只有
-Djava.net.preferIPv4Stack=true
此外,我仅在应用程序中定义了代理配置:
client = ODataClientFactory.getClient();
client.getConfiguration().setHttpClientFactory(
new ProxyWrappingHttpClientFactory(URI.create("http-prox.example.com:8080")));
这对我有用。 :)
URI uri;
String scheme = "http";
try {
uri = new URI (scheme,null,host,port,null,null,null);
} catch (URISyntaxException e) {
throw(e);
}
HttpClientFactory clientProxy = new ProxyWrappingHttpClientFactory(uri,userName,password );
client.getConfiguration().setHttpClientFactory(clientProxy);
即使我在代理后面,我也可以使用不同的浏览器并使用 Postman 成功访问以下 OData 服务:
String SERVICE_ROOT =
http://services.odata.org/V4/TripPinService/
但是,在 Java 中使用 Apache Olingo 我无法访问此服务。
-Dhttp.proxySet=true -Dhttp.proxyHost=http-proxy.example.com -Dhttp.proxyPort=8080
等 JVM 参数允许我执行基本的 URL 功能,例如检索 HTTP 状态代码 (google returns 200
)。然而,使用 ODataClient 访问 OData 服务是不可能的(下面的代码)。不会抛出任何错误。
ODataClient client = ODataClientFactory.getClient();
ODataServiceDocumentRequest request = client.getRetrieveRequestFactory().getServiceDocumentRequest(SERVICE_ROOT);
ODataRetrieveResponse<ClientServiceDocument> response = request.execute();
我尝试在 Olingo 中使用代理功能,但没有成功:
client.getConfiguration().setHttpClientFactory(new ProxyWrappingHttpClientFactory(URI.create("http://http-proxy.example.com:8080")));
我做错了什么,我还有什么选择?
非常感谢。
如果您使用 NTLM 代理,您可以尝试使用 NTLMAuthHttpClientFactory。
NTLMAuthHttpClientFactory ntlm = new NTLMAuthHttpClientFactory(username, password, workstation, domain);
client.getConfiguration().setHttpClientFactory(ntlm);
万一不行,你可以试试cntlm。安装它,在 C:\Program Files (x86)\Cntlm\cntlm.ini
中更改用户名、密码、域和代理,然后调用 net start cntlm
。
将此用于 Olingo:
client.getConfiguration().setHttpClientFactory(new ProxyWrappingHttpClientFactory(URI.create("http://localhost:3128")));
我自己解决了这个问题。在 VM 参数中,我现在只有
-Djava.net.preferIPv4Stack=true
此外,我仅在应用程序中定义了代理配置:
client = ODataClientFactory.getClient();
client.getConfiguration().setHttpClientFactory(
new ProxyWrappingHttpClientFactory(URI.create("http-prox.example.com:8080")));
这对我有用。 :)
URI uri;
String scheme = "http";
try {
uri = new URI (scheme,null,host,port,null,null,null);
} catch (URISyntaxException e) {
throw(e);
}
HttpClientFactory clientProxy = new ProxyWrappingHttpClientFactory(uri,userName,password );
client.getConfiguration().setHttpClientFactory(clientProxy);