2012-05-03 11 views
0

まだPythonには全く新しいです。 this questionに似た問題があります。私のスクリプトは、メッセージにwsseを使用し、HTTPSを使用してプロビジョニングされたWebサービスに接続しようとしています。私は認証されていないプロキシを使用する必要があります。私は次のようにサービスを利用するために泡を使用します。なぜこのsudsスクリプトはurlopenエラーを返すのですか?[Errno -2]名前またはサービスが不明ですか?

import logging 
import suds 
import urllib2 
from suds.client import Client 
from suds.transport.https import HttpAuthenticated 

#---These are not real values but represent them.--------- 
SERVICE_URL = 'https://service.com/1/soap' 
SERVICE_USR = 'serviceusr' 
SERVICE_PWD = 'servicepwd' 
WSDL_URL = 'file:///folder/a.wsdl' 
PROXY_NAME = 'proxy' 
PROXY_PORT = 80 
#---------------------------------------------------------- 

logging.basicConfig(level = logging.DEBUG) 
logging.getLogger('suds.client').setLevel(logging.DEBUG) 
logging.getLogger('suds.transport').setLevel(logging.DEBUG) 

proxy_info = {'host': PROXY_NAME,'port': PROXY_PORT} 
proxyHandler = urllib2.ProxyHandler({'https':'https://(host)s:%(port)d/' % proxy_info}) 
opener = urllib2.build_opener(proxyHandler) 
urllib2.install_opener(opener) 
security = suds.wsse.Security() 
token = suds.wsse.UsernameToken(SERVICE_USR, SERVICE_PWD) 
security.tokens.append(token) 
messageTransport = HttpAuthenticated(username = SERVICE_USR, password = SERVICE_PWD) 
messageTransport.urlopner = opener 
client = Client(url = WSDL_URL, location = SERVICE_URL, transport = messageTransport) 
client.set_options(wsse=security) 
result = client.service.ParseValidAddress('1 ABC Street Somwhere') 

スクリプトは、私は次のエラーを取得する実行したら:

Error details: <class 'urllib2.URLError'> <urlopen error [Errno -2] Name or service not 
known> 

だから私は、次のようにすべてのネットワークビットが働いている確認するには、カール走っ:

curl -x proxy:80 https://service1.com/1/soap 

これは、ネットワーク構成とプロキシが正しくセットアップされていることを示すSOAPメッセージを返します。では、なぜ泡が同じではないのですか?私はどこで失敗したのですか?

+0

プロキシが実行されているポートを明確にすることはできますか? –

+0

プロキシはポート80にあります.HTTPSの場合はどちらが奇妙ですか? – GrantVS

+1

あなたのプロキシホスト 'proxy'は解決可能ですか? 'proxy'ホストのFQDNを追加してみてください。つまり、 'PROXY_NAME = 'proxy.example.com'です。ポート80で実行されているプロキシも使用されているか、HTTPSであるかは不思議ではありません。私たちは仕事で同じことをしています。 –

答えて

0

成功!私は以下のことをして、それは働いた。 proxySettings = {'https':'http://{0}:{1}'.format(PROXY_NAME, PROXY_PORT)}が追加され、クライアントのオプションがclient.set_options(proxy = proxySettings)に設定されました。すべてのおかげで助けになりました。

2

proxyHandler = urllib2.ProxyHandler({'https':'https://%(host)s:%(port)d/' % proxy_info}) 

(両方とも "HTTPS" の終わりと "%" で "S" を注意して)であるべきです。

+0

こんにちは。ああ、そうだね、今編集するよ。残念ながらまだErrno-2です。ありがとう。 – GrantVS

+1

あなたにも%がありませんでした。 –

関連する問題