Verifica via SMS in Python
Uno script completo con la libreria requests: acquista un numero temporaneo, attende il codice e chiude l’ordine. Nessun SDK necessario.
Come ricevo un codice di verifica via SMS in Python?
Usa requests con l’intestazione X-Api-Key: POST /v1/orders per ottenere il numero, interroga GET /v1/orders/{id} ogni 4 secondi finché messages contiene l’SMS, leggi messages[-1]["code"] e chiama POST finish. Se non arriva nulla in tempo, chiama POST cancel per sbloccare l’importo.
Preparazione
- Python 3.8 o successivo.
- pip install requests
- Esporta la chiave: export SMSNITRO_API_KEY=...
Script completo
import os
import time
import requests
API = "https://smsnitro.com/api/v1"
session = requests.Session()
session.headers["X-Api-Key"] = os.environ["SMSNITRO_API_KEY"]
def api(method, path, **kw):
r = session.request(method, API + path, timeout=30, **kw)
if r.status_code >= 400:
raise RuntimeError(f"{r.status_code}: {r.json().get('detail')}")
return r.json()
print("Balance:", api("GET", "/balance")["balance"], "USD")
order = api("POST", "/orders", json={"product": "telegram", "country": "usa"})
print("Number:", order["phone"], "order", order["id"])
deadline = time.time() + 600 # numbers stay reserved for up to 20 minutes
while time.time() < deadline:
order = api("GET", f"/orders/{order['id']}")
if order["messages"]:
print("Code:", order["messages"][-1]["code"])
api("POST", f"/orders/{order['id']}/finish")
break
if order["status"] in ("CANCELED", "TIMEOUT", "BANNED", "FINISHED"):
print("Ended without SMS:", order["status"], "(not charged)")
break
time.sleep(4) # poll every 3 to 5 seconds
else:
api("POST", f"/orders/{order['id']}/cancel") # refund the frozen amount
print("No SMS: cancelled and refunded")Come funziona lo script
- Una requests.Session mantiene la connessione e l’intestazione della chiave per tutte le chiamate.
- Qualsiasi risposta 4xx o 5xx solleva un’eccezione con il messaggio detail della API.
- Interroga ogni 4 secondi per un massimo di 10 minuti e poi annulla, quindi un SMS che non arriva non costa nulla.
- Sostituisci product e country con l’app e il paese che ti servono; GET /v1/services elenca le opzioni.