Files
python-doc/Docs/Libs/Requests/requests.md
RadinPirouz 4cc57be794 request lib
2026-02-08 22:08:05 +03:30

313 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# HTTP Requests in Python with `requests`
This document explains how to use the **`requests`** library to send HTTP requests, handle responses, work with APIs, upload/download files, manage headers, authentication, errors, and more.
> `requests` is not part of the standard library and must be installed:
```bash
pip install requests
```
---
## 1. Sending a Basic GET Request
### Code
```python
import requests
r = requests.get("http://myip.abbascloud.ir")
print(r.url)
print(r.status_code, r.ok)
print(r.text)
print(r.content)
print(r.json())
print(r.headers)
```
### Explanation
- `requests.get(url)` sends an HTTP GET request.
- `r.url`: final URL after redirects.
- `r.status_code`: HTTP status code (e.g. 200, 404).
- `r.ok`: `True` if status code is < 400.
- `r.text`: response body as string.
- `r.content`: response body as raw bytes.
- `r.json()`: parses JSON response into Python objects.
- `r.headers`: response headers as a dictionary.
---
## 2. Passing Query Parameters
### Code
```python
params = {
"q": "python",
"page": 1
}
response = requests.get("https://api.example.com/search", params=params)
print(response.url)
```
### Explanation
- `params` are appended to the URL as query strings.
- Automatically encoded by `requests`.
- Resulting URL:
```
https://api.example.com/search?q=python&page=1
```
---
## 3. Sending POST Requests (Form Data)
### Code
```python
data = {
"username": "alex",
"password": "secret"
}
requests.post(url, data=data)
```
### Explanation
- Sends data as `application/x-www-form-urlencoded`.
- Common for HTML form submissions.
---
## 4. Sending POST Requests (JSON)
### Code
```python
json_data = {
"name": "Alex",
"age": 25
}
requests.post(url, json=json_data)
```
### Explanation
- Automatically serializes data to JSON.
- Sets `Content-Type: application/json`.
- Preferred for REST APIs.
---
## 5. Custom Request Headers
### Code
```python
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"User-Agent": "MyApp/1.0",
"Accept": "application/json"
}
response = requests.get(url, headers=headers)
```
### Explanation
- Used for authentication, API versioning, and content negotiation.
- Common headers:
- `Authorization`
- `User-Agent`
- `Accept`
---
## 6. Authentication (Basic Auth)
### Code
```python
from requests.auth import HTTPBasicAuth
requests.get(
"https://api.example.com",
auth=HTTPBasicAuth("username", "password")
)
```
### Explanation
- Sends credentials using HTTP Basic Authentication.
- Automatically encodes credentials in headers.
---
## 7. Working with Cookies
### Code
```python
response = requests.get(url)
print(response.cookies)
```
### Explanation
- Cookies are stored in a `RequestsCookieJar`.
- Useful for sessions and login persistence.
---
## 8. Uploading Files
### Code
```python
files = {
"file": open("example.txt", "rb")
}
response = requests.post(url, files=files)
```
### Explanation
- Sends files as `multipart/form-data`.
- Common for file uploads to APIs.
---
## 9. Downloading Files
### Simple Download
```python
response = requests.get("https://example.com/image.png")
with open("image.png", "wb") as f:
f.write(response.content)
```
- Downloads entire file into memory.
- Suitable for small files.
---
### Streaming Large Files
```python
response = requests.get(url, stream=True)
with open("big.zip", "wb") as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
```
- Downloads file in chunks.
- Prevents high memory usage.
- Recommended for large files.
---
## 10. Timeout and Error Handling
### Code
```python
try:
response = requests.get(url, timeout=5)
response.raise_for_status()
except requests.exceptions.Timeout:
print("Request timed out")
except requests.exceptions.HTTPError as e:
print("HTTP error:", e)
except requests.exceptions.RequestException as e:
print("Request failed:", e)
```
### Explanation
- `timeout`: maximum wait time (seconds).
- `raise_for_status()`: raises exception for 4xx / 5xx errors.
- `RequestException`: base class for all request errors.
---
## 11. Using Proxies
### Code
```python
proxies = {
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080"
}
requests.get(url, proxies=proxies)
```
### Explanation
- Routes requests through a proxy server.
- Useful for debugging, privacy, or corporate networks.
---
## 12. SSL Verification
### Code
```python
requests.get(url, verify=True) # default
requests.get(url, verify=False) # NOT recommended
```
### Explanation
- `verify=True` checks SSL certificates.
- Disabling SSL verification is insecure and should only be used for testing.
---
## 13. Real API Example (GitHub)
### Code
```python
import requests
API_URL = "https://api.github.com/users/octocat"
response = requests.get(API_URL)
if response.ok:
user = response.json()
print(user["login"], user["public_repos"])
else:
print("Error:", response.status_code)
```
### Explanation
- Sends a GET request to GitHubs public API.
- Parses JSON response.
- Accesses specific fields safely.
- Checks request success using `response.ok`.
---
## Summary
- `requests` simplifies HTTP communication
- Supports GET, POST, headers, params, JSON, files
- Handles authentication, cookies, proxies, and SSL
- Built-in error handling improves reliability
- Widely used for REST APIs and web services