sockets - Python - multiprocessing and monkey patching way safety ? (best monkey patching method may born from my idea) -
i'm writing proxy software, proxy software support standard aready, hardest problem, "socks proxy per domain/url (if '???' in self.host: socks'" without break whole script using monkey patching method, must use monkey patching method because best without error far, if use method, proxy use socks server download page, not pages want use socks proxy because monkey patching method "socket" change whole socket library , make whole socket library use socks proxy, , httplib, urllib based on socket library.
https://github.com/anorov/pysocks
import urllib2 import socket import socks socks.set_default_proxy(socks.socks5, "localhost") socket.socket = socks.socksocket urllib2.urlopen("http://www.somesite.com/") # requests pass through socks proxy
i must use monkey patch anyway, opener.open method page break lot page redirect 30x forever, tlsv1 error.... monkey patch "perfect", no bug, no anything, work whole local proxy use socks proxy overkill, want use socks proxy per page.
after day after day non-stop thinking, figure something, "if create new fresh process using multiprocessing, , monkey patch socket of process, urlopen content domain/url above without affect local proxy main process , return content main process , use content display web browser, great!"
my method like: "i have proxy listen @ 127.0.0.1:1111 , create proxy listen @ 127.0.0.1:2222, proxy port 2222 monkey patched socket library make download page using socks proxy, , every time want use socks proxy chain 1111 proxy 2222 proxy".
plus if monkey patching method can done, can bandwidth throttle monkey patching socket , more without break main process.
my idea may born of greatest monkey patch ever, please me, appreciate if can me write demo code.
and here answer question, thank everybody:
import multiprocessing mp import urllib.request def foo(q): #q.put("123") import socks import socket socks.set_default_proxy(socks.socks5, "localhost", 10080) socket.socket = socks.socksocket r = urllib.request.urlopen("http://httpbin.org/ip") #print("123") q.put(r.read()) if __name__ == '__main__': ctx = mp.get_context('spawn') q = ctx.queue() p = ctx.process(target=foo, args=(q,)) p.start() print(q.get()) p.join() r = urllib.request.urlopen("http://httpbin.org/ip") print(r.read())
this way create isolated process , monkey patch socket library process.
output ilde:
b'{\n "origin": "xxx.148.2.18"\n}\n' b'{\n "origin": "xx.xxx.113.133"\n}\n'
Comments
Post a Comment