我正在尝试使用Java客户端将SharePoint列表项发布到SharePoint 2010列表。
我可以使用以下代码读取SP列表项,但不确定如何写入SharePoint。
对于发布操作,我收到了HTTP 401错误。
任何指导将不胜感激。

GET操作:

String url = "https://organization.company.com/sites/Ateam/_vti_bin/ListData.svc/TableLoadInfo";        DefaultHttpClient client = new DefaultHttpClient();

        NTCredentials credentials = new NTCredentials(username, password, hostname, domain);
        AuthScope scope = new AuthScope(hostname, 443);

        SSLContext sslcontext = SSLContext.getInstance("TLS");
        sslcontext.init(null, new TrustManager[] { trustmanager }, null);

        SSLSocketFactory sf = new SSLSocketFactory(sslcontext,              SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
        Scheme https = new Scheme("https", 443, sf);

        client.getConnectionManager().getSchemeRegistry().register(https);
        client.getCredentialsProvider().setCredentials(scope, credentials);

        HttpGet request = new HttpGet(url);
        //request.addHeader("Accept", "application/xml");
        request.addHeader("Accept", "application/json;odata=verbose");

        HttpResponse response = client.execute(request);


开机自检操作:

字符串url =“ https://organization.company.com/sites/Ateam/_vti_bin/ListData.svc/TableLoadInfo”;

DefaultHttpClient客户端=新的DefaultHttpClient();

        NTCredentials credentials = new NTCredentials(username, password, hostname, domain);
        AuthScope scope = new AuthScope(hostname, 443);

        SSLContext sslcontext = SSLContext.getInstance("TLS");
        sslcontext.init(null, new TrustManager[] { trustmanager }, null);

        SSLSocketFactory sf = new SSLSocketFactory(sslcontext, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
        Scheme https = new Scheme("https", 443, sf);

        client.getConnectionManager().getSchemeRegistry().register(https);
        client.getCredentialsProvider().setCredentials(scope, credentials);

        // POST a data
        HttpPost request = new HttpPost(url);

                    request.addHeader("Accept", "application/json;odata=verbose");
        request.addHeader("Content-type", "application/json;odata=verbose");
        // request.addHeader("X-RequestDigest", FormDigestValue);
        request.addHeader("X-HTTP-Method", "POST");
        request.addHeader("If-Match", "*");

        JSONStringer json = (JSONStringer) new JSONStringer().object().key("Table_Name").value("TableName 1")
                .key("Load_Frequency").value("Weekly").key("Cycle").value("CURRENT").endObject();


        StringEntity se = new StringEntity(json.toString());
        request.setEntity(se);

                    HttpResponse response = client.execute(request);

最佳答案

将数据发布到SharePoint时,必须在标题内添加“ FormDigestValue”。

请注意,您已经注释了“ request.addHeader("X-RequestDigest", FormDigestValue);”行。

这就是您收到401错误的原因。

首先,您必须从当前站点获取“ FormDigestValue”值。
然后将该值添加到标题中。
以下代码显示了获取FormDigestValue的方法。

            String digestqueryURL = serverurl + subsite + "/" + "_api/contextinfo";
            HttpPost httpPost = new HttpPost(digestquery);
            httpPost.addHeader("Accept", "application/json;odata=verbose");
            httpPost.addHeader("X-ClientService-ClientTag", "SDK-JAVA");
            HttpResponse response = httpClient.execute(httpPost);

            byte[] content = EntityUtils.toByteArray(response.getEntity());

            String jsonString = new String(content, "UTF-8");
            JSONObject json = new JSONObject(jsonString);

            String FormDigestValue = json.getJSONObject("d")
                    .getJSONObject("GetContextWebInformation")
                    .getString("FormDigestValue");


然后,在执行发布操作时,将FormDigestValue添加到标题。

request.addHeader("X-RequestDigest", FormDigestValue);

10-06 03:23