Tôi có một tập lệnh Python tạo nhiều kết nối đồng thời, ngắn ngủi bằng cách sử dụng thư viện requests. Tôi đặc biệt cần phải tìm ra các cổng nguồn được sử dụng bởi mỗi kết nối và tôi con số tôi cần truy cập vào ổ cắm cơ bản cho điều đó. Có cách nào để có được điều này thông qua các đối tượng phản ứng?Cách lấy ổ cắm bên dưới khi sử dụng các yêu cầu Python
Trả lời
Đối với kết nối trực tuyến (được mở bằng tham số stream=True
), bạn có thể gọi phương thức .raw.fileno()
trên đối tượng phản hồi để nhận mô tả tệp mở.
Bạn có thể sử dụng phương pháp socket.fromfd(...)
để tạo ra một đối tượng Socket Python từ mô tả:
>>> 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)
Đối với ổ cắm phi trực tuyến, các bộ mô tả tập tin được dọn dẹp trước khi đối tượng response được trả về. Theo như tôi có thể nói không có cách nào để có được nó trong tình huống này.
Điều này làm việc tuyệt vời. Tôi phát hiện ra rằng nếu tôi sử dụng phương pháp của bạn bên trong "callback" response, tôi có thể thực hiện điều này ngay cả với các yêu cầu không streaming. – Elektito
- 1. gevent yêu cầu ổ cắm khối redis'
- 2. Cấp phép Sails.js cho các yêu cầu ổ cắm
- 3. Thực hiện yêu cầu https bằng cách sử dụng ổ cắm trên linux
- 4. Cách chính xác để sử dụng ổ cắm miền unix trong khung yêu cầu là gì?
- 5. Không chặn các ổ cắm python
- 6. Ổ cắm Python +
- 7. libpcap có sử dụng ổ cắm thô bên dưới chúng không?
- 8. Ổ cắm Python - giữ ổ cắm còn sống?
- 9. Nhận html bằng cách sử dụng các yêu cầu Python?
- 10. Lấy nhiệt độ ổ cứng bằng cách sử dụng Python
- 11. Sử dụng ổ cắm Flash với Node.js
- 12. Cách lấy giá trị của các biến yêu cầu bằng cách sử dụng Python và Flask
- 13. Thực tiễn tốt nhất khi sử dụng ổ cắm web?
- 14. Đăng JSON bằng cách sử dụng các yêu cầu Python
- 15. Sử dụng lại các ổ cắm web giữa các trang?
- 16. C#: Làm thế nào để thực hiện một yêu cầu HTTP bằng cách sử dụng ổ cắm?
- 17. Cách tách riêng phần đầu/thân HTTP khỏi yêu cầu Ổ cắm PHP
- 18. Có thể ghi đè lên các tùy chọn ổ cắm mặc định trong các yêu cầu không?
- 19. Ổ cắm gác máy khi đăng yêu cầu đến Node-http-proxy Node.js
- 20. python, twistedmatrix ... đăng nhập qua ổ cắm
- 21. Sử dụng ổ cắm web với Angular4?
- 22. Vấn đề ổ cắm khi sử dụng luồng
- 23. Sử dụng gprof với ổ cắm
- 24. Cách nhận yêu cầu ICMP trong C với ổ cắm thô
- 25. Chrome bị treo trên "yêu cầu gửi" dường như có liên quan đến ổ cắm
- 26. Cách tạo ổ cắm Boost.Asio từ ổ cắm gốc?
- 27. Gửi tệp qua ổ cắm bằng Python
- 28. Đồng thời ArrayList trên các kết nối ổ cắm
- 29. Lấy tất cả các đối tượng ổ cắm trong io.socket
- 30. Thử nghiệm đơn vị C# bằng cách sử dụng các ổ cắm
Một giải pháp thay thế có thể là trong cửa sổ 'netstat -a' có thể liệt kê tất cả các quy trình với các cổng được sử dụng. Bạn có thể mã một kịch bản python để có được đầu ra của lệnh này và sau đó làm công việc tiếp theo. Nó không phải là khó. Không chắc chắn nếu điều này có thể được thực hiện bởi 'yêu cầu' lib. –
Có nhiều kết nối đồng thời ngắn ngủi trong chương trình của tôi. Không có cách nào để biết cổng nào thuộc về kết nối nào. – Elektito
Bạn có thể truy xuất tất cả các cổng được ứng dụng của bạn sử dụng, nhưng bạn không thể sử dụng bất kỳ lệnh tích hợp nào (Windows) để tìm kết nối ứng dụng của bạn đang sử dụng số cổng nào. Tôi sẽ đề nghị hỏi trong Superuser.com –