Я хотел бы вызвать функцию Windows C++ WinHttpGetProxyForUrl из Python - это можно сделать?
Microsoft предоставляет метод как часть WinHTTP, который позволяет пользователю определить, какой прокси должен использоваться для любого заданного URL. Это называется WinHttpGetProxyForUrl.
К сожалению, я программирую на python, поэтому я не могу напрямую получить доступ к этой функции - я могу использовать Win32COM для вызова любой службы Microsoft с интерфейсом COM.
Так есть ли способ получить доступ к этой функции из Python? В качестве дополнительной проблемы я не могу добавить в проект ничего, кроме Python. Это означает, что, однако, удобно добавлять исправления C# или C++.
Я использую Python2.4.4 с расширениями Win32 в Windows XP.
Обновление 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:
2 ответа
Вы можете использовать ctypes для вызова функции в WinHttp.dll, это DLL, которая содержит WinHttpGetProxyForUrl. "Хотя для его вызова вам понадобится переменная сеанса 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
Эта страница в ActiveState: WINHTTP_AUTOPROXY_OPTIONS
Объект подразумевает, что WinHttpGetProxyForUrl
доступно в модуле win32inet расширений Win32. SourceForge в настоящее время не работает, поэтому я не могу загрузить его, чтобы проверить, является ли он или нет.
Изменить после "Обновление 0" в вопросе:
Вам нужно пройти WINHTTP_AUTOPROXY_OPTIONS
и WINHTTP_PROXY_INFO
как описано здесь на MSDN: функция WinHttpGetProxyForUrl.