400 错误请求无效动词 SharePoint Rest Api Java

普尼特

我正在尝试向 SharePoint REST 接口发布请求。我正在尝试更新列值。当我使用Fiddler发布时(响应:204),我能够成功地做到这一点。当我使用 Apache HttpClient 发送时,我收到 400 Bad Request - Invalid Verb。

作为旁注,当我尝试使用 Fiddler 作为该程序的代理(本地主机,端口 8888)时,请求成功。但是,当我再次删除代理并尝试失败时。我的 Java 代码有问题吗?

这是通过 HTTP post 发送 JSON 字符串的方式吗?

private static final String API_ENDPOINT = "/_api/web";
    private static final String CONTEXT_INFO_ENDPOINT = "/_api/contextinfo";
    private static final String APPLICATION_JSON = "application/json;odata=verbose";
    private static final String IF_MATCH = "If-Match";
    private static final String X_HTTP_Method = "X-HTTP-Method";
    private static final String MERGE = "MERGE";
    private static final String X_RequestDigest = "X-RequestDigest";
    private static final String METADATA = "__metadata";

    public static boolean setFieldValue(CloseableHttpClient httpClient, String siteURL, String serverRelativeURL, String fieldName, String fieldValue, String fieldType) {

    CloseableHttpResponse response = null;

    try {
        URI siteURI = new URI(siteURL);
        URI postURI = new URIBuilder(siteURI)
                .setPath(siteURI.getPath() + API_ENDPOINT + "/GetFileByServerRelativeUrl('" + serverRelativeURL + "')/ListItemAllFields")
                .build();
        HttpPost postRequest = new HttpPost(postURI);

        postRequest.addHeader(HttpHeaders.ACCEPT, APPLICATION_JSON );
        postRequest.addHeader(HttpHeaders.CONTENT_TYPE, APPLICATION_JSON);
        postRequest.addHeader(HttpHeaders.HOST, siteURI.getHost());
        postRequest.addHeader(IF_MATCH, "*");
        postRequest.addHeader(X_HTTP_Method, MERGE);

        String formDigestValue = getFormDigestValue(httpClient, siteURI);
        if (StringUtils.isBlank(formDigestValue)) {
            logger.error("FORM DIGEST VALUE IS = " + formDigestValue);
            return false;
        }
        postRequest.addHeader(X_RequestDigest, formDigestValue);

        JSONObject type = new JSONObject();
        type.put("type", fieldType);

        JSONObject jsonBody = new JSONObject();
        jsonBody.put(METADATA , type);
        jsonBody.put(fieldName, fieldValue);


        logger.debug("setFieldValue(): " + jsonBody.toString());
        postRequest.setEntity(new StringEntity(jsonBody.toString()));
        //String jsonString = "{'__metadata':{'type':'SP.Data.NextlabsDLItem'},'TextHeader':'Java1'}";
        //JSONObject jsonObject = new JSONObject(jsonString);
        //logger.debug(jsonObject);
        //postRequest.setEntity(new ByteArrayEntity(jsonBody.toString().getBytes(), ContentType.APPLICATION_JSON));
        logger.debug("setFieldValue(): " + postRequest.getRequestLine());

        response = httpClient.execute(postRequest);

        logger.debug("setFieldValue(): " + response.getStatusLine());

        int status = response.getStatusLine().getStatusCode();

        HttpEntity entity = response.getEntity();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(entity.getContent()));
        int cp;
        StringBuilder sb = new StringBuilder();
        while ((cp = bufferedReader.read()) != -1) {
            sb.append((char) cp);
        }
        logger.debug("String Response......." + sb);
        bufferedReader.close();
        if (status >= 200 && status < 300) {
            return true;
        } else {
            logger.error("setFieldValue(): " + response.getStatusLine().toString().toUpperCase());
        }

    } catch (URISyntaxException | IOException e) {
        logger.error("setFieldValue(): " + e.getMessage(), e);
    } finally {
        try {
            if (response != null) {
                response.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return false;

}
普尼特

很抱歉发布我自己的答案,但终于找到了问题。

该错误是ExpectContinuedFlag在 apache HTTPClient 中启用的。

我在 HTTP 初始化中更改了以下内容,现在可以使用了!

    RequestConfig requestConfig = RequestConfig.custom()
            .setExpectContinueEnabled(***false***)
            .setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.DIGEST))
            .setProxyPreferredAuthSchemes(Collections.singletonList(AuthSchemes.BASIC))
            .build();

    return HttpClients.custom()
            .setConnectionManager(connManager)
            .setDefaultCredentialsProvider(creds)
            .setDefaultRequestConfig(requestConfig)
            .build();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从Sharepoint Rest API下载文件时出现400错误

来自分类Dev

使用REST API更新Sharepoint元数据会产生400错误的请求错误

来自分类Dev

Sharepoint Angular REST添加项目产生400(错误请求)

来自分类Dev

从 Java 应用程序到 TFS REST API 的 HTTP PATCH 请求获得 400(错误请求)错误

来自分类Dev

可以从Postman调用Rest API,显示来自Java的400错误请求

来自分类Dev

OneDrive REST API提供了400个无效动词用于文件上传

来自分类Dev

Parse.com REST API错误代码400:从Java HTTP请求到云功能的错误请求

来自分类Dev

解析推送REST API错误400“错误请求”

来自分类Dev

OAuth,PHP,Rest API和curl发出400错误请求

来自分类Dev

HTTP / 1.1 400错误请求Sabre REST Api

来自分类Dev

Axios对Firebase Auth REST API的发布请求产生400错误

来自分类Dev

REST'put','post' 400 个错误的请求。Javascript、HTML、Java

来自分类Dev

SharePoint REST API URL

来自分类Dev

Sharepoint 在线 API 返回:HTTP 错误 400。请求头字段太长

来自分类Dev

Wordpress wp rest api v2错误400(错误请求)“对象{代码:” rest_invalid_param“,消息:”无效参数:id“,数据:对象}

来自分类Dev

从JAVA到Sharepoint 2013 REST API的BASIC身份验证

来自分类Dev

使用Rest更新SharePoint列表中的文本字段将返回错误代码400

来自分类Dev

Outlook Rest Api发送邮件请求返回状态400

来自分类Dev

无法使用Jive REST API发布共享-收到400错误的请求错误

来自分类Dev

ALM Rest API:站点会话返回“远程服务器返回错误:(400) 错误请求。”

来自分类Dev

使用rest api的sharepoint搜索

来自分类Dev

我需要什么权限才能使用 SharePoint 的 REST API 获取 SharePoint 网站的请求摘要?

来自分类Dev

Microsoft Dynamics REST API $filter 参数返回 400 错误

来自分类Dev

使用REST API创建Sonatype Nexus存储库会导致HTTP / 1.1 400错误请求

来自分类Dev

使用Microsoft Speech到文本REST API时,收到400- OGG文件格式的错误请求

来自分类Dev

使用CURL创建和发送邮件的Office 365 REST API获取HTTPCode 400错误请求

来自分类Dev

使用CURL创建联系人的Office 365 REST API获取HTTPCode 400错误请求

来自分类Dev

Azure COSMOSDB 指标 - HttpClientErrorException$BadRequest:400 错误请求 - 无法使用 REST API

来自分类Dev

Django Rest Framework JWT 400错误请求

Related 相关文章

  1. 1

    从Sharepoint Rest API下载文件时出现400错误

  2. 2

    使用REST API更新Sharepoint元数据会产生400错误的请求错误

  3. 3

    Sharepoint Angular REST添加项目产生400(错误请求)

  4. 4

    从 Java 应用程序到 TFS REST API 的 HTTP PATCH 请求获得 400(错误请求)错误

  5. 5

    可以从Postman调用Rest API,显示来自Java的400错误请求

  6. 6

    OneDrive REST API提供了400个无效动词用于文件上传

  7. 7

    Parse.com REST API错误代码400:从Java HTTP请求到云功能的错误请求

  8. 8

    解析推送REST API错误400“错误请求”

  9. 9

    OAuth,PHP,Rest API和curl发出400错误请求

  10. 10

    HTTP / 1.1 400错误请求Sabre REST Api

  11. 11

    Axios对Firebase Auth REST API的发布请求产生400错误

  12. 12

    REST'put','post' 400 个错误的请求。Javascript、HTML、Java

  13. 13

    SharePoint REST API URL

  14. 14

    Sharepoint 在线 API 返回:HTTP 错误 400。请求头字段太长

  15. 15

    Wordpress wp rest api v2错误400(错误请求)“对象{代码:” rest_invalid_param“,消息:”无效参数:id“,数据:对象}

  16. 16

    从JAVA到Sharepoint 2013 REST API的BASIC身份验证

  17. 17

    使用Rest更新SharePoint列表中的文本字段将返回错误代码400

  18. 18

    Outlook Rest Api发送邮件请求返回状态400

  19. 19

    无法使用Jive REST API发布共享-收到400错误的请求错误

  20. 20

    ALM Rest API:站点会话返回“远程服务器返回错误:(400) 错误请求。”

  21. 21

    使用rest api的sharepoint搜索

  22. 22

    我需要什么权限才能使用 SharePoint 的 REST API 获取 SharePoint 网站的请求摘要?

  23. 23

    Microsoft Dynamics REST API $filter 参数返回 400 错误

  24. 24

    使用REST API创建Sonatype Nexus存储库会导致HTTP / 1.1 400错误请求

  25. 25

    使用Microsoft Speech到文本REST API时,收到400- OGG文件格式的错误请求

  26. 26

    使用CURL创建和发送邮件的Office 365 REST API获取HTTPCode 400错误请求

  27. 27

    使用CURL创建联系人的Office 365 REST API获取HTTPCode 400错误请求

  28. 28

    Azure COSMOSDB 指标 - HttpClientErrorException$BadRequest:400 错误请求 - 无法使用 REST API

  29. 29

    Django Rest Framework JWT 400错误请求

热门标签

归档