Ho uno script Python che crea molte connessioni simultanee di breve durata utilizzando la libreria requests. Ho specificamente bisogno di trovare la porta sorgente utilizzata da ciascuna connessione e immagino di aver bisogno di accedere al socket sottostante per quello. C'è un modo per ottenere questo attraverso l'oggetto risposta?Come ottenere il socket sottostante quando si usano le richieste Python
risposta
Per i collegamenti di streaming (quelli aperti con il parametro stream=True
), è possibile chiamare il metodo .raw.fileno()
sull'oggetto risposta per ottenere un descrittore di file aperto.
È possibile utilizzare il metodo socket.fromfd(...)
per creare un oggetto socket Python dal descrittore:
>>> import requests
>>> import socket
>>> r = requests.get('http://google.com/', stream=True)
>>> s = socket.fromfd(r.raw.fileno(), socket.AF_INET, socket.SOCK_STREAM)
>>> s.getpeername()
('74.125.226.49', 80)
>>> s.getsockname()
('192.168.1.60', 41323)
Per socket non di streaming, il descrittore di file viene ripulito prima che l'oggetto di risposta viene restituito. Per quanto posso dire, non c'è modo di farlo in questa situazione.
Questo funziona benissimo. Ho scoperto che se uso il tuo metodo all'interno della callback "response" posso farlo anche con richieste non streaming. – Elektito
- 1. Le richieste Python talvolta si bloccano
- 2. prestazioni Haskell quando si usano le classi e le istanze
- 3. Come si usano le spline in pythonOCC?
- 4. richieste python: ordine ottenere parametri
- 5. Come sottoclasse il Navigation Controller quando si usano gli storyboard?
- 6. Identificatore sconosciuto quando si usano le costanti C#
- 7. overflow: nascosto non funziona quando si usano le tabelle
- 8. Come si cancella la cache con le richieste Python?
- 9. Quando si usano le esuberanti ctags quali opzioni usare?
- 10. Cosa significa() in un'espressione lambda quando si usano le azioni?
- 11. Quando si usano vararg in Java?
- 12. Utilizzo di Python "richieste" con connessione socket esistente
- 13. Autorizzazione Sails.js per richieste socket
- 14. Come ottenere il nome file pdf con richieste Python?
- 15. Ottenere "connessione sottostante chiusa" su HttpWebRequest
- 16. Quando si usano oggetti funzione in C++?
- 17. Le richieste Python inviano il certificato come stringa
- 18. Come si relaziona con le dipendenze quando si usano i modelli TeamCity?
- 19. Come rimuovere le stringhe doc quando si usano le distutils Cython?
- 20. Errore OSStatus sottostante sconosciuto -16364 quando si utilizza AVAssetWriter
- 21. Dove memorizzare le password db quando si usano le applicazioni Windows .NET o ASP.NET
- 22. Come si usano le icone di fontello nel mio css?
- 23. In Mathematica. Quando si usano le immagini come vertici in GraphPlot, come posso evitare che le immagini si sovrappongano?
- 24. Come si usano le sezioni in app.config C# 4.0?
- 25. differenza tbl_df e data.frame quando si usano i loop
- 26. Python + socket
- 27. Come si usano le variabili booleane in Perl?
- 28. Come si usano le classi NodaTime in un PropertyGrid?
- 29. È possibile utilizzare ZeroMQ per accettare le richieste socket tradizionali?
- 30. Come si usano le variabili di classe in Clamato?
Un'alternativa potrebbe essere In windows 'netstat -a' può elencare tutti i processi con gli esseri di porte utilizzati. È possibile codificare uno script python per ottenere l'output di questo comando e quindi eseguire il lavoro ulteriore. Non è così difficile. Non è sicuro se questo può essere fatto dalla lib 'requests'. –
Ci sono molte connessioni simultanee di breve durata nel mio programma. Non c'è modo di sapere quale porta appartiene a quale connessione. – Elektito
È possibile recuperare tutte le porte utilizzate dall'applicazione, ma non è possibile utilizzare alcun comando incorporato (Windows) per individuare la connessione dell'applicazione che utilizza il numero di porta. Vorrei suggerire di chiedere in Superuser.com –