我是编程新手,我希望使用Python 3.3访问Windows翻译令牌。 MS为C#和PHP提供了here指南,但我似乎无法在Python中复制他们的成功。 代码在HTTPConnection阶段失败。
编辑[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并且需要访问令牌的人来说,这是一个相当普遍的问题?
如果您对如何诊断此错误有任何建议或获取访问密钥的更好方法,请分享。
答案 0 :(得分:1)
我找到了解决方案。 MS有一个有用的调试工具: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)
致以最诚挚的问候,