使用Python调用Freedom of Information Act API遇API Key相关错误求助
Let’s break down what’s going wrong here and fix it step by step:
1. Malformed URL from Incorrect API Key Placement
Your current code appends the API key directly to the base URL like this:
endpoint = f"{api_base_url}{apikey}"
This is not how most APIs handle authentication. Even with an empty key, this approach sets you up for failure—if you filled in the key, it would create a broken URL like https://api.foia.gov/api/webform/submityouractualkey, which triggers the InvalidSchema error because the URL structure is unrecognizable.
APIs typically expect keys to be passed either as a query parameter or in the request headers. For example, using a query parameter (the most common approach for public APIs):
endpoint = f"{api_base_url}?api_key={apikey}"
2. Wrong HTTP Request Method
The endpoint webform/submit clearly indicates you’re trying to submit data, which requires a POST request, not GET. GET requests are meant for retrieving data, not sending/submitting it. Using GET here will never work as intended, even if you fix the URL.
3. Empty API Key
Your apikey variable is an empty string. You’ll need to replace this with a valid key obtained from the FOIA API portal before the request can be authenticated successfully.
Corrected Code Example
Here’s a revised version of your code (adjust the authentication method if the FOIA API specifies using headers instead of query params):
import requests # Replace with your actual, valid API key apikey = "your_foia_api_key_here" api_base_url = "https://api.foia.gov/api/webform/submit" # Pass API key as a query parameter endpoint = f"{api_base_url}?api_key={apikey}" # Prepare the form data you want to submit (check FOIA API docs for required fields) form_submission_data = { "full_name": "Your Full Name", "email": "your.email@example.com", "request_details": "Your specific FOIA request text here..." } try: # Use POST instead of GET for form submission response = requests.post(endpoint, data=form_submission_data) print(response.status_code) print(response.text) except Exception as e: print(f"Request failed: {str(e)}")
Quick Additional Notes
- Always cross-reference the official FOIA API documentation to confirm the exact authentication method and required fields for the submit endpoint—this ensures you’re following their specific rules.
- The
InvalidSchemaerror is directly tied to your malformed URL structure; fixing how you append the API key will resolve that specific issue immediately.
内容的提问来源于stack exchange,提问作者Meredith Jackson

