我想通过Python从我的Outlook帐户下载电子邮件及其附件。因此,由于不想使用Django,因此对official python script进行了一些更改。在下面,您可以看到我的两次失败尝试,两次相应的错误和一些注释。如果我没有记错的话,那么当我尝试获取用于获取访问令牌的授权代码时就会出现问题。在此步骤中,我无法使我的应用成功自动登录。尽管我仅在这篇文章中介绍授权码问题,但我想提醒您,第二个问题来自我使用client_id,client_secret和手动获得的授权码获得的错误访问令牌。
请注意,我正在使用所谓的“ Azure AD v2身份验证终结点”(如https://docs.microsoft.com/en-us/previous-versions/office/office-365-api/api/version-2.0/use-outlook-rest-api和https://docs.microsoft.com/en-us/outlook/rest/python-tutorial中所建议)来注册和验证我的应用。值得强调的是,我也曾尝试使用Azure AD和OAuth(即处理应用程序注册和用户授权'https://manage.windowsazure.com/'的第二种方法),但没有成功。我的情况下正确的方法是什么?我的错误在哪里?考虑到我的问题,我认为我错误地注册了我的应用程序。
预先感谢您,祝大家愉快。
修改后的脚本:
let unique = set1.intersection(set2)
let elements = (array1 + array2).filter{unique.contains($0.id)}
print(elements)
错误:
(1)
# Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE.txt in the project root for license information.
#from urllib.parse import quote, urlencode
from urlparse import urlparse
from urllib2 import urlopen
from urllib import urlencode
import requests
import base64
import json
import time
import httplib
# Client ID and secret
client_id = 'xxxxxxxxxx'
client_secret = 'xxxxxxxxxx'
# Constant strings for OAuth2 flow
# The OAuth authority
authority = 'https://login.microsoftonline.com'
# The authorize URL that initiates the OAuth2 client credential flow for admin consent
authorize_url = '{0}{1}'.format(authority, '/common/oauth2/v2.0/authorize?{0}')
# The token issuing endpoint
token_url = '{0}{1}'.format(authority, '/common/oauth2/v2.0/token')
# The scopes required by the app
scopes = [ 'openid',
'User.Read',
'Mail.Read',
'offline_access']
def get_signin_url(redirect_uri):
# Build the query parameters for the signin url
params = { 'client_id': client_id,
'redirect_uri': redirect_uri,
'response_mode': 'query',
'response_type': 'code',
'scope': ' '.join(str(i) for i in scopes)
}
signin_url = authorize_url.format(urlencode(params))
return signin_url
signin_url = get_signin_url("http://localhost/myapp/")
## first attempt
signin_url_r = signin_url.replace('https://', "")
conn = httplib.HTTPConnection(signin_url_r)
#conn.request("GET", "code")
#conn.request("GET","/")
#r1 = conn.getresponse()
#print(r1.read())
#print(r1.status, r1.reason)
## second attempt
resq = requests.get(signin_url)
print resq.status_code
print resq.text
print resq.url
#with open('authhelper_f_v0.html', 'w') as outfile:
# outfile.write(resq.text)
(2)
ERROR ---> conn.request("GET", "code")
gaierror: [Errno -2] Name or service not known
评论:
第一次尝试会给出错误(1),我认为这是由于get响应中缺少“ code”一词。如果我在第二次尝试中打印“ resq.text”,则确实可以看到get响应不是预期的响应(即GET HTTP / 1.1 302找到的位置:http://localhost/myapp/?code= xxxxx&session_state = xxxx&state = xxx -请参阅https://docs.microsoft.com/en-us/outlook/rest/get-started中的“登录成功后的重定向请求”),而不是您在(2)中看到的那个,即Outlook登录 页。
答案 0 :(得分:0)