2015-07-26 14 views
5

Tôi muốn chuyển tất cả các thuật toán của Python thông qua máy chủ proxy http, tôi đã kiểm tra urlib2 và yêu cầu các gói, chúng có thể được cấu hình để sử dụng proxy nhưng làm cách nào tôi có thể sử dụng proxy như toàn hệ thống để Python ủy quyền tất cả dữ liệu ngoài?Làm thế nào để vượt qua tất cả các thuật toán của Python thông qua một proxy http?

+0

Bạn có ý nghĩa gì với proxy toàn hệ thống và cách bạn định cấu hình nó? Nếu có một, bạn nên giải nén nó và đặt nó trong urllib2. – helloV

+0

Ý tôi là, tôi không muốn sử dụng proxy cho một thư viện Python cụ thể (như yêu cầu), thay vào đó tôi muốn chuyển tất cả các giao dịch có nguồn gốc từ quá trình Python chạy tập lệnh của tôi thông qua proxy. – habedi

+0

Tôi nghĩ rằng bạn đang cố gắng tiếp cận điều này từ một hướng sai. Nếu bạn cần một cái gì đó như "hệ thống proxy rộng", bạn nên cố gắng giải quyết vấn đề này trên cấp độ mạng. Tôi không nghĩ rằng có hệ thống tập tin cấu hình rộng cho urlib hoặc yêu cầu thư viện. – Boris

Trả lời

9

Linux hệ thống xuất khẩu đầu tiên các biến môi trường như thế này

$ export http_proxy="http://<user>:<pass>@<proxy>:<port>" 
$ export HTTP_PROXY="http://<user>:<pass>@<proxy>:<port>" 

$ export https_proxy="http://<user>:<pass>@<proxy>:<port>" 
$ export HTTPS_PROXY="http://<user>:<pass>@<proxy>:<port>" 

hoặc trong kịch bản mà yo muốn vượt qua trough một proxy

import os 

proxy = 'http://<user>:<pass>@<proxy>:<port>' 

os.environ['http_proxy'] = proxy 
os.environ['HTTP_PROXY'] = proxy 
os.environ['https_proxy'] = proxy 
os.environ['HTTPS_PROXY'] = proxy 

#your code goes here............. 

sau đó chạy script python

$ python my_script.py 

LÊN DATE

Bạn cũng có thể sử dụng redsocks bằng công cụ này, bạn có thể chuyển hướng âm thầm tất cả các kết nối TCP của bạn đến PROXY có hoặc không có xác thực. Nhưng bạn phải cẩn thận vì nó cho tất cả các kết nối không chỉ cho python.

hệ thống Windows bạn có thể sử dụng các công cụ như freecap, proxifier, proxycap, và cấu hình để chạy đằng sau những trăn thực thi

+1

câu trả lời tuyệt vời ... cảm ơn – Nickal

+0

@efirvida Nó không hoạt động trong trường hợp của tôi: https://stackoverflow.com/questions/48676514/how-to-resolve-proxy-error-in-reading-writing- to-hdfs-using-python Tôi đã xem câu trả lời của bạn sau khi tôi đăng câu hỏi này. Tôi đã thử xuất khẩu các proxy như bạn nói ở đây, và sau đó os.environ ... Nhưng lỗi vẫn tồn tại. – Kristada673

1

Phải thừa nhận rằng, đây không phải là chính xác những gì bạn đang tìm kiếm, nhưng nếu bạn biết chương trình nguồn của tất cả lưu lượng truy cập mạng trong mã python của bạn, bạn có thể thực hiện gói proxy này trong chính mã. Một giải pháp trăn tinh khiết được đề nghị sử dụng các mô-đun PySocks tại liên kết sau:

https://github.com/httplib2/httplib2/issues/22

import httplib2 
# detect presense of proxy and use env varibles if they exist 
pi = httplib2.proxy_info_from_environment() 
if pi: 
    import socks 
    socks.setdefaultproxy(pi.proxy_type, pi.proxy_host, pi.proxy_port) 
    socks.wrapmodule(httplib2)  

# now all calls through httplib2 should use the proxy settings 
httplib2.Http() 

Bây giờ mỗi cuộc gọi được thực hiện sử dụng sẽ sử dụng những thiết lập proxy. Bạn sẽ có thể bọc bất kỳ mô-đun mạng nào sử dụng ổ cắm để sử dụng proxy này.

https://github.com/Anorov/PySocks

Họ đề cập đến đó mà điều này không được khuyến khích, nhưng có vẻ như được làm việc tốt cho tôi.

Các vấn đề liên quan