从SharePoint提取数据时遭遇Error 400问题求助
Let’s walk through possible issues and fixes tailored to your scenario:
1. Fix Your Request Headers
You added Content-type: application/xml to your headers, but for a GET request (which doesn’t send a request body), this header is unnecessary and could be triggering the 400 error. Instead, use the Accept header to specify the format you expect SharePoint to return:
headers = {"Authorization": "Bearer " + token, "Accept": "application/xml"} request = requests.get("https://xxxxxxx.sharepoint.com/sites/xxxxxxx/_api/xxxxxx/xxxxx/xxxxx", headers=headers)
If you prefer JSON responses, swap the Accept value to application/json;odata=verbose.
2. Use the Office365 Library’s Built-In Tools
Since you’re already using the office365 library, leverage its native request handling instead of raw requests calls. This automatically manages authentication headers and SharePoint-specific formatting, reducing manual errors:
from office365.runtime.http.request_options import RequestOptions from office365.runtime.client_request import ClientRequest # Build request options using your existing context request_url = "https://xxxxxxx.sharepoint.com/sites/xxxxxxx/_api/xxxxxx/xxxxx/xxxxx" request_options = RequestOptions(request_url) request_options.headers.add("Accept", "application/xml") # Execute the request client_request = ClientRequest(ctx) response = client_request.execute_request_direct(request_options) # Inspect the full response content print(response.content.decode("utf-8"))
3. Verify the OData Endpoint Details
Double-check critical details about your target API:
- Are there typos in the endpoint path (e.g.,
xxxxxx/xxxxx/xxxxx)? - Does the endpoint require OData query parameters (like
$metadataor$select) to function? - Confirm the endpoint belongs to the site collection you’ve granted permissions to—while
sitecollectionscope covers subsites, it’s worth validating the path matches the site’s structure.
4. Get the Exact Error Message
Error 400 is generic, but SharePoint returns detailed error content that tells you exactly what’s broken. Print the response text to uncover the root cause:
print(request.text)
Look for elements like <Error><Message><Value>...</Value></Message></Error> in the XML response—this will highlight issues like invalid URLs, missing permissions, or unsupported headers.
5. Reconfirm App Permissions
Even with the correct XML configuration:
- Ensure your site administrator has approved the app permissions (go to
Site Settings > App Permissions, locate your app, and confirm the permission grant is active). - If the OData endpoint is a custom API (not a standard SharePoint list/library), verify it supports App-Only authentication—some custom endpoints require user context instead of app-level access.
内容的提问来源于stack exchange,提问作者OliMyFriend

