Forum Discussion
rickyhuang2025
Mar 31, 2025Copper Contributor
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