2009-07-03 14 views
1

マイクロソフトではWinHTTPの一部としてメソッドを提供しています。このメソッドを使用すると、指定したURLにどのProxyを使用するかを判断できます。これはWinHttpGetProxyForUrlと呼ばれています。私はWindows C++関数WinHttpGetProxyForUrlをPythonから呼びたいと思います。これはできますか?

残念ながら、私はPythonでプログラミングしていますので、この関数に直接アクセスすることはできません。Win32COMを使用して、COMインターフェイスでMicrosoftサービスを呼び出すことができます。

Pythonからこの関数にアクセスする方法はありますか?もう一つの問題として、プロジェクトにPython以外のものを追加することはできません。つまり、C#またはC++の修正を追加するのは不可能ですが、便利です。

Windows XP上でPython2.4.4をWin32拡張機能で実行しています。

更新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

答えて

1

ctypesを使用してWinHttp.dllの関数を呼び出すことができます。これは 'WinHttpGetProxyForUrl'を含むDLLです。 ' これを呼び出すには、HINTERNETセッション変数が必要ですが、ここでは最初の手順を示します.ctypesを使用してDLLに呼び出す方法、WinHttpGetProxyForUrlに渡す必要があるHINTERNETを生成する方法、運動としてあなたのために残します、あなたが難しいPOSTを私はそれを修正しようとするコードを感じる場合。

のActiveStateでこのページ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

Python 2.4.4でctypesはありません(Python 2.5で追加されました) –

+0

あなたはctypesをインストールできますhttp://python.net/crew/theller/ctypes/ –

+0

はい、私はあなたの例を得ましたか?私はまだ次のビットを行う方法について混乱していますか?戻り値を取得するために構造体を作成する必要があります(http://msdn.microsoft.com/en-us/library/aa383912(VS.85).aspx)cTypesでこれを行う方法がわかりません。 –

1

@のctypesについて詳しく読む:WINHTTP_AUTOPROXY_OPTIONS ObjectWinHttpGetProxyForUrlは、Win32の拡張子のwin32inetモジュールで利用可能であることを意味します。 SourceForgeは現在壊れているので、ダウンロードできないかどうかを確認するためにダウンロードすることはできません。問題の "アップデート0" の後に

編集WinHttpGetProxyForUrl Function

あなたは、MSDNにここに記載されているようWINHTTP_AUTOPROXY_OPTIONSWINHTTP_PROXY_INFOを渡す必要があります。

+0

あなたは素晴らしいです! :-) –

+0

私はこのようなインターネットハンドルを得ることができます: hinternet = win32inet.InternetOpen( "foo 1.0"、0、 ""、 "0) しかし、私はこのハンドルオブジェクトを使用することができないようですプロキシ情報を取得する。 –

+0

残念ながら、このモジュールは壊れているように見えますが、完全に文書化されていません。どのようにこれを使用する考えですか? –

関連する問題