使用 win32inet.WinHttpGetProxyForUrl 的正确方法是什么
我正在尝试使用 Win32com 开发人员公开的 Microsoft WinHttp 库的一项功能。 不幸的是,大多数库似乎没有文档记录,并且没有通过 win32com 库使用 win32inet 功能的正确方法的示例。
这就是我到目前为止所做的:
import win32inet
hinternet = win32inet.InternetOpen("foo 1.0", 0, "", "", 0)
# Does not work!!!
proxy = win32inet.WinHttpGetProxyForUrl( hinternet, u"http://www.foo.com", 0 )
如您所见,我想做的就是使用 win32inet 功能来找出哪个代理适合用于给定的 URL,例如他的案例 foo.com。
你能帮我纠正最后一行的语法吗? MSN 有一些有关所包装函数的良好文档 但参数似乎没有完美地映射到 python 库的参数。
该脚本的固定版本应该:
能够查找要使用的代理 对于任何给定的 URL。
它应该始终准确地执行 Internet Explorer 将执行的操作(即使用相同的代理)
它应该在任何网络上都有效有效的 Windows XP 设置。 这意味着它应该与显式配置的代理一起使用,并且根本不需要代理。
它只需要在 Windows XP 32 位和 Python 2.4.4 上运行。 它可以使用任何官方发布的 win32com 版本。
我在 Windows XP 上使用 Python2.4.4 和 Win32Com。
更新 0:
或者...您能给我 cTypes 中的替代实现吗? 只要我能成功我就很高兴了!
I'm trying to use a feature of the Microsoft WinHttp library that has been exposed by the developers of Win32com. Unfortunately most of the library does not seem to be documented and there are no example of the correct way to use the win32inet features via the win32com library.
This is what I have so far:
import win32inet
hinternet = win32inet.InternetOpen("foo 1.0", 0, "", "", 0)
# Does not work!!!
proxy = win32inet.WinHttpGetProxyForUrl( hinternet, u"http://www.foo.com", 0 )
As you can see, all I am trying to do is use the win32inet feature to find out which proxy is the appropriate one to use for a given URL, int his case foo.com.
Can you help me correct the syntax of the last line? MSN has some good documentation for the function being wrapped but the args do not seem to map the to those of the python library perfectly.
The fixed version of this script should:
Be able to look up which proxy to use
for any given URL.It should always do exactly what Internet Explorer would do (i.e. use the same proxy)
It should be valid on any valid Windows XP set-up. That means it should work with an explicitly configured proxy and also no proxy at all.
It only needs to work on Windows XP 32bit with Python 2.4.4. It can use any official released version of win32com.
I'm using Python2.4.4 with Win32Com on Windows XP.
UPDATE 0:
OR... can you give me an alternative implementation in cTypes? As long as I can make it work I'm happy!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
下面是创建 HINTERNET 会话并使用它来获取代理详细信息的代码,使用 ctypes 直接访问 winhttp DLL。
它可以正常工作,没有任何错误,但我的机器上没有设置代理,您可能需要调整一些常量才能使其正确。 浏览代码中的 msdn 链接,我从那里看到了 API。
Here is the code which creates HINTERNET session and uses that to get proxy details, using ctypes to directly access winhttp DLL.
It works without any error but I have no proxy set on my machine, you may have to tweak few constants to get it right. Go thru the msdn links in code, from where I have seen the API.
除非有充分的理由使用
win32inet
(由于SWIG
的限制,这方面很混乱),我建议您使用ctypes
反而。Unless there is a strong reason for using
win32inet
(which is messy in this area due to limitations ofSWIG
), I recommend that you usectypes
instead.至少对于 Windows XP x86 和 Windows 8 x64 上的
Python 2.7.6
和Pywin 218
来说,它可以工作:值得一提的是,该示例使用自动代理选项 WINHTTP_AUTOPROXY_CONFIG_URL 来传入一个明确的 URL。 您可以使用其他选项,例如,如果您想使用 DNS 或 DHCP 自动检测,您可以这样做:
您可以在上面显示的链接中找到其他选项(在代码中)
At least with
Python 2.7.6
andPywin 218
on Windows XP x86 and Windows 8 x64, it works:Worth to mention that the example uses the autoproxy option WINHTTP_AUTOPROXY_CONFIG_URL in order to pass in an explicit URL. You can use other options, for instance, if you want to autodetect using DNS or DHCP you can do:
You can find other options in the link showed above (in the code)