如何在代理

时间:2017-01-12 15:24:23

标签: java apache proxy odata olingo

我可以使用不同的浏览器成功访问以下OData服务,甚至使用Postman,所以我支持代理:     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返回200)。然而,使用ODataClient访问OData-Service是不可能的(下面的代码)。没有错误被抛出。

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 个答案:

答案 0 :(得分: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")));

答案 1 :(得分:0)

我以某种方式解决了这个问题。在VM参数中,我现在只有

-Djava.net.preferIPv4Stack=true

此外,我仅在应用程序中定义了代理配置:

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

这对我有用。 :)

答案 2 :(得分:0)

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