如何使用Python 3.3访问Windows Azure账户令牌
我刚开始学习编程,想用Python 3.3来访问Windows的翻译令牌。微软在这里提供了C#和PHP的指导,但我在Python中却无法成功实现。
编辑 [5月14日]:我找到了一些改进的方法,似乎有帮助。
我用来连接的简单代码是:
from suds.client import Client
import http.client
# Initialize variables:
wsdlUrl = "http://api.microsofttranslator.com/V2/Soap.svc"
clientID = "ID";
clientSecret = "SECRET"
authUrl = "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/"
scopeUrl = "http://api.microsofttranslator.com"
grantType = "client_credentials"
def getTokens(grantType, scopeUrl, clientID, clientSecret, authUrl):
headers = {"grant_type": grantType, "client_id": clientID, "client_secret": clientSecret, "scope": scopeUrl}
conn = http.client.HTTPSConnection('datamarket.accesscontrol.windows.net')
conn.request("POST", "/v2/OAuth2-13", "", headers)
response = conn.getresponse()
print(response.status, response.reason)
getTokens(grantType, scopeUrl, clientID, clientSecret, authUrl)
现在我收到的错误是:400 错误请求。
我查了一下这个错误,发现很多时候解决方法都比较简单。我也尝试了这些解决方案,但还是没有成功。
我想这可能是任何想使用Azure并需要访问令牌的人都会遇到的常见问题吧?
如果你有任何建议,能帮我诊断这个错误或者更好的获取访问密钥的方法,请分享一下。
1 个回答
1
我找到了解决办法。微软有一个很有用的调试工具,地址是:http://oauthdevconsole.cloudapp.net/PartialOAuth
最后的解决方案是需要把头部信息转换成字符串,并且要用上面提到的工具来修改一个秘密中的特殊字符。
最终的代码在这里:
def getTokens(grantType, scopeUrl, clientID, clientSecret, authUrl):
conn = http.client.HTTPSConnection('datamarket.accesscontrol.windows.net')
conn.request("POST", "/v2/OAuth2-13/", "client_id="+clientID+"&client_secret="+clientSecret+"&grant_type=client_credentials&scope="+scopeUrl)
response = conn.getresponse()
print(response.status, response.reason)
祝好,
- Rob