Я уже пару месяцев использую скрипт Python ews-orgmode / ews-fetch-calendar.py , чтобы без проблем загрузить мой рабочий календарь Office365 / Outlook / Exchange. Однако на прошлой неделе я переставил среды Python в моей системе Linux (установил меньше пакетов через системный менеджер пакетов и больше через pip). Это остановило мою загрузку календаря, потому что я также удалил pycurl (наряду с некоторыми другими пакетами, которые мне пришлось переустановить, используя pip для повторного запуска некоторых других сценариев).
Однако и после переустановки pycurlЯ не могу заставить скрипт работать больше. Скрипт и файл config / settings не изменились, поэтому либо в моей среде Python что-то не так, либо между 29 октября 2019 и 6 ноября 2019 года что-то случилось в серверном API. Я обычно пробовал это в своей системе и в выделенной виртуальной среде (устанавливая только необходимые пакеты), но безрезультатно, и я в растерянности относительно того, что делать дальше, поэтому мой пост здесь.
Сценарий написан на Python2, и у меня установлен Python2.7 в моей системе Gentoo Linux. Кажется, проблема заключается в ошибке, сообщаемой сервером Outlook / EWS, которая приводит к пустому ответу, который в итоге разбивает код. Я сильно подозреваю, что проблема заключается во взаимодействии pycurl / server, но я недостаточно осведомлен, чтобы выяснить, в чем именно заключается проблема. Любые советы (или решения) будут приветствоваться: -)
Settings:
ewsHost outlook.office365.com/
ewsUrl EWS/Exchange.asmx
ewsUser xxx@xxx.xx
ewsPassword xxxxxxxxxxxx
ewsAuthType basic
ewsCAInfo
timezoneLocation xxx/xxx
daysHistory 30
daysFuture 90
maxEntries 300
Debug output pycurl:
* Trying 40.101.18.242:443...
* TCP_NODELAY set
* Connected to outlook.office365.com (40.101.18.242) port 443 (#0)
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server did not agree to a protocol
* Server certificate:
* subject: C=US; ST=Washington; L=Redmond; O=Microsoft Corporation; CN=outlook.com
* start date: Nov 17 00:00:00 2018 GMT
* expire date: Nov 17 12:00:00 2020 GMT
* subjectAltName: host "outlook.office365.com" matched cert's "*.office365.com"
* issuer: C=US; O=DigiCert Inc; CN=DigiCert Cloud Services CA-1
* SSL certificate verify ok.
* Server auth using Basic with user 'xxx@xxx.xx'
> POST /EWS/Exchange.asmx HTTP/1.1
Host: outlook.office365.com
Authorization: Basic ZnFsbWhAaGFuLm5sOmhxeWh3ZGtmdndmdmp2cGM=
User-Agent: PycURL/7.43.0.3 libcurl/7.66.0 OpenSSL/1.1.1d zlib/1.2.11 libssh2/1.9.0
Accept: */*
Transfer-Encoding: chunked
Content-Type: text/xml; charset=UTF-8
Content-Length: 912
Expect: 100-continue
* Mark bundle as not supporting multiuse
< HTTP/1.1 500 Internal Server Error
< Server: Microsoft-IIS/10.0
< request-id: ec37d426-3b42-4c40-9136-9f085e39e833
< X-CalculatedFETarget: VI1PR09CU002.internal.outlook.com
< X-ProxyErrorLabel: ProxyHandler::ExecuteRequestHandler/ProxyHandler::SubmitBackEndRequest
< X-ProxyErrorHResult: 0x80070057
< X-ProxyErrorMessage: The parameter is incorrect.
< X-Proxy-RoutingCorrectness: 1
< X-Powered-By: ASP.NET
< X-FEServer: AM4PR0501CA0059
< Date: Thu, 07 Nov 2019 10:37:51 GMT
< Content-Length: 0
* HTTP error before end of send, stop sending
<
* Closing connection 0
Traceback (most recent call last):
File "./ews-fetch-calendar.py", line 204, in <module>
root = etree.fromstring(data)
File "src/lxml/etree.pyx", line 3234, in lxml.etree.fromstring
File "src/lxml/parser.pxi", line 1876, in lxml.etree._parseMemoryDocument
File "src/lxml/parser.pxi", line 1764, in lxml.etree._parseDoc
File "src/lxml/parser.pxi", line 1127, in lxml.etree._BaseParser._parseDoc
File "src/lxml/parser.pxi", line 601, in lxml.etree._ParserContext._handleParseResultDoc
File "src/lxml/parser.pxi", line 711, in lxml.etree._handleParseResult
File "src/lxml/parser.pxi", line 640, in lxml.etree._raiseParseError
File "<string>", line 1
lxml.etree.XMLSyntaxError: Document is empty, line 1, column 1