Forum Discussion

rickyhuang2025's avatar
rickyhuang2025
Copper Contributor
Mar 31, 2025

Failed to get FormDigestValue with 403 Forbidden in java

Hello Everyone,

   This is my first time to access sharepoint via java in my project. I used AI to get varies of java code and try to connect to sharepoint to get FormDigestValue as step one (The target is to upload files). Somehow it always return 403.  Could you please help to figure out the root cause? I appreciate for any comments. I struggle with the problem for several days already. 

 

Code 1:

System.setProperty("sun.net.http.allowRestrictedHeaders", "true");
URL urlRequest = new URL(siteUrl + "/_api/contextinfo");
HttpURLConnection contextInfoRequest = (HttpURLConnection) urlRequest.openConnection();
contextInfoRequest.setRequestProperty("Content-Type", "application/json;odata=verbose");
contextInfoRequest.setRequestProperty("Accept", "application/json;odata=verbose");
contextInfoRequest.setRequestProperty("Connection", "Keep-Alive");
contextInfoRequest.setRequestProperty("Content-Length", "0");
contextInfoRequest.setDoOutput(true);
contextInfoRequest.setRequestMethod("POST");

String authStr = username + ":" + password;
String encodedAuthStr = Base64.getEncoder().encodeToString(authStr.getBytes());
contextInfoRequest.setRequestProperty("Authorization", "Basic " + encodedAuthStr);

contextInfoRequest.connect();
InputStream in = contextInfoRequest.getInputStream();   -- 403 here

 

Code 2:

System.setProperty("sun.net.http.allowRestrictedHeaders", "true");
URL urlRequest = new URL(siteUrl + "/_api/contextinfo");
HttpURLConnection contextInfoRequest = (HttpURLConnection) urlRequest.openConnection();
contextInfoRequest.setRequestProperty("Content-Type", "application/json;odata=verbose");
contextInfoRequest.setRequestProperty("Accept", "application/json;odata=verbose");
contextInfoRequest.setRequestProperty("Connection", "Keep-Alive");
contextInfoRequest.setRequestProperty("Content-Length", "0");
contextInfoRequest.setDoOutput(true);
contextInfoRequest.setRequestMethod("POST");

Authenticator.setDefault(new Authenticator() {
@Override
 public PasswordAuthentication getPasswordAuthentication() {
 return new PasswordAuthentication(domain + "\\" + username, password.toCharArray()); 

 }
});
contextInfoRequest.connect();

InputStream in = contextInfoRequest.getInputStream();  -- 403 here

 

Code 3:

// Create the SharePoint context
HttpClient client = createHttpClient();
String authHeader = getBasicAuthHeader(shareac, sharepw);

// Example request to SharePoint
HttpRequest request = HttpRequest.newBuilder().uri(URI.create(galurl + "/_api/contextinfo"))
.header("Authorization", authHeader)
.header("Accept", "application/json;odata=verbose")
.POST(HttpRequest.BodyPublishers.ofString(""))
.build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("Response Status Code: " + response.statusCode());   -- 403 here

 

Code 4:

// 设置SSL协议
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(null, null, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());

// 创建HttpClient
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(new AuthScope(galurl, -1, AuthScope.ANY_REALM),
new UsernamePasswordCredentials(shareac, sharepw));

CloseableHttpClient httpClient = HttpClients.custom()
.setDefaultCredentialsProvider(credentialsProvider)
.build();

// 使用httpClient进行请求
// 示例:发送GET请求
HttpGet httpget = new HttpGet(galurl);
HttpResponse response = httpClient.execute(httpget);

// 处理响应
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("Response status code: " + statusCode);    -- 403 here

 

 

No RepliesBe the first to reply

Resources