2015-08-31 8 views
5

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

+0

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'. –

+0

Ci sono molte connessioni simultanee di breve durata nel mio programma. Non c'è modo di sapere quale porta appartiene a quale connessione. – Elektito

+0

È 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 –

risposta

3

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.

+2

Questo funziona benissimo. Ho scoperto che se uso il tuo metodo all'interno della callback "response" posso farlo anche con richieste non streaming. – Elektito

Problemi correlati