gpt4 book ai didi

Python套接字实现

转载 作者:行者123 更新时间:2023-11-28 21:54:36 25 4
gpt4 key购买 nike

我是 python 的新手,但是我有很强的 C 背景,我试图弄清楚它是如何工作的:How can I use a SOCKS 4/5 proxy with urllib2?

我难以理解的部分是它们覆盖了 socket.socketsocket.socket 是运行 type(socket .套接字)。因此,我对您如何能够覆盖这样的类型感到困惑,或者 socket.socket 在这种情况下实际上是他们正在重新定义的函数,因此实际上返回了不同的类型?通常,如果我在函数上运行 type,它会返回它的函数或方法或其他任何内容。

我想我真正想了解的是幕后发生的事情?

最佳答案

I guess what I am really trying to understand is what is happening under the covers?

这是一个很好的问题。

像这样在另一个命名空间中存储变量称为"monkey patching" .

代码示例实际上并未覆盖类型。相反,它更新 socket 模块命名空间中的 socket 变量以指向 socks 4/5 类。然后,当 urllib2 查找 socket.socket 变量时,它现在使用 SocksiPy module而不是 native 套接字。

重要的是要知道 socket.socket 是一个变量,它最初设置为指向内置套接字类型。可以更新该变量以指向新的 4/5 套接字类型。当 urllib2 查找变量时,它使用替代变量而不是原始变量。

从概念上讲,发生的事情大致类似于:

>>> socket = 'old_native_socket'
>>> def urllib2(url):
return 'Looking up', url, 'using', socket

>>> socket = 'new_4_5_socket'
>>> urllib2('http://www.python.org')
Looking up http://www.python.org using new_4_5_socket

这里是 math 的简单猴子补丁示例模块:

>>> import math
>>> def area(radius):
return math.pi * radius ** 2.0

>>> math.pi = 3.1 # monkey patch
>>> area(10)
310.0

关于Python套接字实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23946702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com