我想从Python调用Windows C++函数WINHTTPGETPROXYFURL,这样做可以吗?

2024-10-01 15:34:39 发布

您现在位置:Python中文网/ 问答频道 /正文

微软提供了一个方法作为WinHTTP的一部分,允许用户决定哪个代理应该用于任何给定的URL。它叫做WinHttpGetProxyForUrl。在

不幸的是,我用python编程,所以不能直接访问这个函数-我可以使用Win32COM调用任何带有COM接口的Microsoft服务。在

那么有没有办法从Python访问这个函数呢?另外一个问题是,除了Python之外,我无法向项目中添加任何内容。这意味着,尽管不方便添加C或C++修复。在

我在WindowsXP上运行带有Win32扩展的Python2.4.4。在

更新0:

到目前为止,我得到的是:

import win32inet
import pprint
hinternet = win32inet.InternetOpen("foo 1.0", 0, "", "", 0)
# Does not work!!!
proxy = win32inet.WinHttpGetProxyForUrl( hinternet, u"http://www.foo.com", 0  )

显然最后一行是错误的,但是我看不到任何正确方法的文档或示例!在

更新1:

I'm going to re-ask this as a new question since it's now really about win32com。在


Tags: 方法函数用户importcomurl代理foo
2条回答

这个位于ActiveState:^{} Object的页面意味着在Win32扩展的win32inet模块中,WinHttpGetProxyForUrl是可用的。SourceForge当前已损坏,因此我无法下载它以验证它是否已损坏。在

编辑在问题中的“更新0”之后:

您需要传递一个WINHTTP_AUTOPROXY_OPTIONS和一个WINHTTP_PROXY_INFO,如MSDN:WinHttpGetProxyForUrl Function中所述。在

您可以使用ctypes在中调用函数WinHttp.dll,它是包含“WinHttpGetProxyForUrl”的DLL 虽然要调用它,你需要一个HINTERNET会话变量,所以在这里我向你展示了第一步,它展示了如何使用ctypes调用DLL,它产生了一个HINTERNET,你必须将它传递给WinHttpGetProxyForUrl,我将留给你作为练习,如果你觉得有困难,发布代码我会尝试修复它。在

阅读有关ctypes@http://docs.python.org/library/ctypes.html的更多信息

import ctypes

winHttp = ctypes.windll.LoadLibrary("Winhttp.dll")

WINHTTP_ACCESS_TYPE_DEFAULT_PROXY=0
WINHTTP_NO_PROXY_NAME=WINHTTP_NO_PROXY_BYPASS=0
WINHTTP_FLAG_ASYNC=0x10000000
# http://msdn.microsoft.com/en-us/library/aa384098(VS.85).aspx
HINTERNET = winHttp.WinHttpOpen("PyWin32", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, WINHTTP_FLAG_ASYNC)

print HINTERNET

相关问题 更多 >

    热门问题