Java HTTP call to Sharepoint 2010 oData fails

隐身守侯 提交于 2019-12-04 21:54:04

My colleague suggested removing content-type request header. From curl the connection to oData worked, comparing the request headers.

Curl displayed:

> GET /sites/team-sites/operations/_vti_bin/listdata.svc/UBCal?=3 HTTP/1.1
> Authorization: NTLM <redacted>
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5
> Host: hostname
> Accept: */*

Java showed the following in the trace logs:

Accept: text/html, image/gif, image/jpeg, *;q=.2, */*; q=.2

I set the Accept request header to "*/*" to the getAuthenticatedResponse method as follows:

 //Added for oData to work
conn.setRequestProperty("Accept", "*/*");

InputStream stream = conn.getInputStream();
....

This resolved the 400 error and I get the feed from Sharepoint oData service. Seems like Java set some default request headers which interfered.

Seems like you already found a working solution, but here's an alternative using the apache httpcomponents library.

What's interesting is they don't include NTLM by default, follow -these- steps to implement it.

HttpContext localContext;

DefaultHttpClient httpclient = new DefaultHttpClient();
    httpclient.getAuthSchemes().register("ntlm", new NTLMSchemeFactory());
    NTCredentials creds = new NTCredentials(user_name, password, domain, domain);
    httpclient.getCredentialsProvider().setCredentials(AuthScope.ANY, creds);

    HttpHost target = new HttpHost(URL, Integer.parseInt(port), "http");
    localContext = new BasicHttpContext();

    HttpPost httppost = new HttpPost(list_name);
    httppost.setHeader("Accept", "application/json");
...
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!