如何在代理后使用Apache Olingo

3
我可以使用不同的浏览器和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状态代码(谷歌返回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")));

我做错了什么,我还有哪些选择?非常感谢您。
3个回答

1
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);

1
如果您在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")));

感谢您的建议。我已经自己解决了这个问题。尽管如此,我还是接受了您的答案,因为我非常感激您的帮助。谢谢! :) - Paul Graystone
谢谢!我遇到了类似的问题,在寻找解决方案时偶然看到了你的问题。上面建议的方法在我的情况下解决了这个问题。 - GeoK

0

我自己解决了这个问题。现在在VM参数中,我只有

-Djava.net.preferIPv4Stack=true

接下来,我仅在应用程序中定义了代理配置:

    client = ODataClientFactory.getClient();
    client.getConfiguration().setHttpClientFactory(
            new ProxyWrappingHttpClientFactory(URI.create("http-prox.example.com:8080")));

这对我有用。:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接