2009-07-03 1 views
1

Microsoft stellt eine Methode als Teil von WinHTTP bereit, mit der ein Benutzer bestimmen kann, welcher Proxy für eine bestimmte URL verwendet werden soll. Es heißt WinHttpGetProxyForUrl.Ich möchte die Windows-C++ - Funktion WinHttpGetProxyForUrl von Python aufrufen - kann dies getan werden?

Leider programmiere ich in Python, so dass ich nicht direkt auf diese Funktion zugreifen kann - ich kann Win32COM verwenden, um Microsoft-Dienst mit einer COM-Schnittstelle aufzurufen.

Gibt es also eine Möglichkeit, von Python auf diese Funktion zuzugreifen? Als zusätzliches Problem kann ich nichts anderes als Python zum Projekt hinzufügen. Das bedeutet, dass es praktisch ist, C# - oder C++ - Fixes hinzuzufügen.

Ich verwende Python2.4.4 mit Win32-Erweiterungen unter Windows XP. 0

Update:

Dies ist, was ich bisher:

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 ) 

Offensichtlich ist die letzte Zeile falsch ist, aber ich kann keine Dokumente oder Beispiele auf dem richtigen Weg sehen, es zu tun!

Update 1:

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

Antwort

1

Sie können Ctypes verwenden, um Funktion in WinHttp.dll aufzurufen, es ist die DLL, die 'WinHttpGetProxyForUrl enthält. ' Um es zu nennen, benötigen Sie eine Variable Sitzung Sitzung, so hier zeige ich Ihnen den ersten Schritt, es zeigt, wie Sie ctypes in DLL aufrufen können, erzeugt es ein HINTERNET, das Sie an WinHttpGetProxyForUrl übergeben müssen, dass ich Wird für Sie als Übung verlassen, wenn Sie Schwierigkeiten POST den Code Ich werde versuchen, es zu beheben.

mehr über ctypes Lesen @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 
+0

Bah, keine Ctypes in Python 2.4.4 (in Python 2.5 hinzugefügt!) –

+0

können Sie ctypes installieren http://python.net/crew/theller/ctypes/ –

+0

Ja, und ich habe Ihr Beispiel zu arbeiten? Ich bin immer noch verwirrt darüber, wie ich das nächste bisschen machen soll? Ich muss eine Struktur machen, um den Rückgabewert zu erhalten (http://msdn.microsoft.com/en-us/library/aa383912(VS.85).aspx) keine Idee, wie man das in cTypes macht. –

1

Diese Seite bei Activestate: WINHTTP_AUTOPROXY_OPTIONS Object bedeutet, dass WinHttpGetProxyForUrl im win32inet Modul der Win32-Erweiterungen zur Verfügung. SourceForge ist derzeit defekt, daher kann ich es nicht herunterladen, um zu überprüfen, ob es ist oder nicht.

bearbeiten nach "Aktualisieren 0" in der Frage:

Sie müssen hier eine WINHTTP_AUTOPROXY_OPTIONS und WINHTTP_PROXY_INFO wie dokumentiert auf MSDN weitergeben müssen: WinHttpGetProxyForUrl Function.

+0

Sie sind fantastisch! :-) –

+0

kann ich einen Internet-Griff wie diese: HINTERNET = win32inet.InternetOpen ("foo 1.0", 0, "", "", 0) Aber ich dieses Handle-Objekt nicht in der Lage sein scheinen zu verwenden, um die Proxy-Informationen zu erfassen. –

+0

Leider scheint dieses Modul kaputt zu sein - und völlig undokumentiert. Irgendeine Idee, wie man das benutzt? –