Praktische Anwendungen und Best Practices
Nachdem Sie gelernt haben, wie man verschiedene Arten von benutzerdefinierten Headern festlegt, wollen wir einige praktische Anwendungen und Best Practices für die Arbeit mit Headern in realen Szenarien untersuchen.
Senden und Empfangen von JSON-Daten
Bei der Arbeit mit modernen APIs ist JSON das gebräuchlichste Datenformat. Sehen wir uns an, wie man Header für JSON-Anfragen richtig festlegt:
- Erstellen Sie eine neue Datei mit dem Namen
json_requests.py
.
- Fügen Sie den folgenden Code hinzu:
import requests
import json
url = 'https://httpbin.org/post' ## This endpoint accepts POST requests
## Data to send
data = {
'name': 'John Doe',
'email': '[email protected]',
'message': 'Hello, world!'
}
## Set appropriate headers for JSON
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
## Method 1: Using the json parameter (recommended)
print("Method 1: Using the json parameter")
response = requests.post(url, json=data, headers=headers)
print(f"Status Code: {response.status_code}")
print(response.json()['headers']) ## Show the headers received
print(f"\nData sent (as received by server): {response.json()['json']}")
## Method 2: Manually converting to JSON
print("\nMethod 2: Manually converting to JSON")
json_data = json.dumps(data)
response = requests.post(url, data=json_data, headers=headers)
print(f"Status Code: {response.status_code}")
print(response.json()['headers']) ## Show the headers received
print(f"\nData sent (as received by server): {response.json()['json']}")
- Führen Sie das Skript aus:
python json_requests.py
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
Method 1: Using the json parameter
Status Code: 200
{'Accept': 'application/json', 'Accept-Encoding': 'gzip, deflate', 'Content-Length': '72', 'Content-Type': 'application/json', 'Host': 'httpbin.org', 'X-Amzn-Trace-Id': 'Root=1-6430ab12-abc123def456'}
Data sent (as received by server): {'name': 'John Doe', 'email': '[email protected]', 'message': 'Hello, world!'}
Method 2: Manually converting to JSON
Status Code: 200
{'Accept': 'application/json', 'Accept-Encoding': 'gzip, deflate', 'Content-Length': '72', 'Content-Type': 'application/json', 'Host': 'httpbin.org', 'X-Amzn-Trace-Id': 'Root=1-6430ab13-abc123def456'}
Data sent (as received by server): {'name': 'John Doe', 'email': '[email protected]', 'message': 'Hello, world!'}
Beachten Sie, dass beide Methoden funktionieren, aber Methode 1 ist bequemer, da die Requests-Bibliothek die JSON-Konvertierung für Sie übernimmt.
Erstellen einer wiederverwendbaren Sitzung mit Standard-Headern
Wenn Sie mehrere Anfragen mit denselben Headern stellen müssen, kann die Verwendung eines Session
-Objekts Zeit sparen und Ihren Code übersichtlicher machen:
- Erstellen Sie eine neue Datei mit dem Namen
session_headers.py
.
- Fügen Sie den folgenden Code hinzu:
import requests
## Create a session object
session = requests.Session()
## Set default headers for all requests made with this session
session.headers.update({
'User-Agent': 'MyCustomApp/1.0',
'Accept-Language': 'en-US,en;q=0.9',
'X-API-Key': 'my_session_api_key'
})
## Make a request using the session - it will include our default headers
print("First request with session:")
response = session.get('https://httpbin.org/headers')
print(response.json())
## Add a custom header just for this request
print("\nSecond request with additional header:")
response = session.get('https://httpbin.org/headers',
headers={'X-Custom-Header': 'Just for this request'})
print(response.json())
## Original headers remain unchanged for future requests
print("\nThird request (original headers only):")
response = session.get('https://httpbin.org/headers')
print(response.json())
- Führen Sie das Skript aus:
python session_headers.py
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
First request with session:
{'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'en-US,en;q=0.9', 'Host': 'httpbin.org', 'User-Agent': 'MyCustomApp/1.0', 'X-API-Key': 'my_session_api_key', 'X-Amzn-Trace-Id': 'Root=1-6430ab45-abc123def456'}}
Second request with additional header:
{'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'en-US,en;q=0.9', 'Host': 'httpbin.org', 'User-Agent': 'MyCustomApp/1.0', 'X-API-Key': 'my_session_api_key', 'X-Custom-Header': 'Just for this request', 'X-Amzn-Trace-Id': 'Root=1-6430ab46-abc123def456'}}
Third request (original headers only):
{'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'en-US,en;q=0.9', 'Host': 'httpbin.org', 'User-Agent': 'MyCustomApp/1.0', 'X-API-Key': 'my_session_api_key', 'X-Amzn-Trace-Id': 'Root=1-6430ab47-abc123def456'}}
Die Verwendung von Sitzungen ist aus mehreren Gründen eine Best Practice:
- Verbesserte Leistung (Connection Pooling).
- Konsistente Header über Anfragen hinweg.
- Automatische Cookie-Handhabung.
- Möglichkeit, bei Bedarf anfragebezogene Anpassungen hinzuzufügen.
Zum Abschluss hier einige Best Practices, die Sie bei der Arbeit mit HTTP-Headern befolgen sollten:
- Verwenden Sie Session-Objekte für mehrere Anfragen an dieselbe Domain.
- Legen Sie Content-Type-Header für die von Ihnen gesendeten Daten korrekt fest.
- Behandeln Sie die Authentifizierung ordnungsgemäß - verwenden Sie nach Möglichkeit die integrierte Authentifizierung.
- Schützen Sie sensible Informationen - hartcodieren Sie keine API-Keys oder Token.
- Befolgen Sie die API-Dokumentation sorgfältig für erforderliche Header.
Hier ist ein abschließendes Beispiel, das diese Best Practices demonstriert:
- Erstellen Sie eine neue Datei mit dem Namen
best_practices.py
.
- Fügen Sie den folgenden Code hinzu:
import requests
import os
## In a real application, get these from environment variables or a secure configuration
## For this example, we're keeping it simple
API_KEY = os.environ.get('API_KEY', 'default_api_key')
BASE_URL = 'https://httpbin.org'
def create_api_client():
"""Create a reusable session with default headers."""
session = requests.Session()
## Set common headers
session.headers.update({
'User-Agent': 'MyApp/1.0',
'X-API-Key': API_KEY,
'Accept': 'application/json'
})
return session
def get_data(client, endpoint):
"""Make a GET request to the specified endpoint."""
url = f"{BASE_URL}/{endpoint}"
response = client.get(url)
return response.json()
def post_data(client, endpoint, data):
"""Make a POST request with JSON data."""
url = f"{BASE_URL}/{endpoint}"
response = client.post(url, json=data)
return response.json()
## Usage example
def main():
## Create the API client
client = create_api_client()
## GET request example
print("Making GET request...")
get_response = get_data(client, 'headers')
print(f"Headers sent: {get_response['headers']}")
## POST request example
print("\nMaking POST request...")
data = {'name': 'John', 'age': 30}
post_response = post_data(client, 'post', data)
print(f"Data received by server: {post_response['json']}")
if __name__ == '__main__':
main()
- Führen Sie das Skript aus:
python best_practices.py
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
Making GET request...
Headers sent: {'Accept': 'application/json', 'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'User-Agent': 'MyApp/1.0', 'X-API-Key': 'default_api_key', 'X-Amzn-Trace-Id': 'Root=1-6430ab78-abc123def456'}
Making POST request...
Data received by server: {'name': 'John', 'age': 30}
Dieses Beispiel demonstriert einen strukturierten Ansatz für die Durchführung von HTTP-Anfragen mit benutzerdefinierten Headern, wobei Best Practices wie das Erstellen wiederverwendbarer Sitzungen, das Organisieren von Code in Funktionen und das Vermeiden von hartcodierten sensiblen Informationen befolgt werden.