這個
更新馬庫斯的建議:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
ssl.SSLContext.verify_mode = property(lambda self: ssl.CERT_NONE, lambda self, newval: None)
import dropbox
access_token = "xxxxxxxx"
file_from = "/home/debian/sample.sql"
file_to = "/mydoc"
proxyDict = {
"http": "http://127.0.0.1:8123",
"https": "https://127.0.0.1:8123"
}
mysesh = dropbox.create_session(1,proxyDict)
dbx = dropbox.Dropbox(access_token,session=mysesh)
with open(file_from, 'rb') as f:
dbx.files_upload(f.read(), file_to)
它遇到以下錯誤:
/home/debian/.local/lib/python3.9/site-packages/urllib3/connectionpool.py:981: InsecureRequestWarning: Unverified HTTPS request is being made to host '127.0.0.1'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
warnings.warn(
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "/home/debian/.local/lib/python3.9/site-packages/dropbox/base.py", line 3208, in files_upload
r = self.request(
File "/home/debian/.local/lib/python3.9/site-packages/dropbox/dropbox_client.py", line 326, in request
res = self.request_json_string_with_retry(host,
File "/home/debian/.local/lib/python3.9/site-packages/dropbox/dropbox_client.py", line 476, in request_json_string_with_retry
return self.request_json_string(host,
File "/home/debian/.local/lib/python3.9/site-packages/dropbox/dropbox_client.py", line 596, in request_json_string
self.raise_dropbox_error_for_resp(r)
File "/home/debian/.local/lib/python3.9/site-packages/dropbox/dropbox_client.py", line 639, in raise_dropbox_error_for_resp
raise AuthError(request_id, err)
dropbox.exceptions.AuthError: AuthError('xxxxxxxxxxxxxxxxxxxxxx', AuthError('invalid_access_token', None))
更新 Life is complex的建議:

uj5u.com熱心網友回復:
我嘗試了很多次才能mysesh = dropbox.create_session(1,proxyDict)正常作業。
我決定查看代碼dropbox-sdk-python并注意到它正在呼叫requests.Session(). 所以我決定使用它dropbox.create_session()
import requests
from dropbox import Dropbox
from dropbox.files import WriteMode
access_token = "my_access_token"
file_from = 'test.docx'
file_to = '/test.docx'
# https://free-proxy-list.net
proxyDict = {
"http": "http://50.218.57.65:80",
"https": "https://83.229.73.175:80"
}
s = requests.Session()
s.proxies = proxyDict
dbx = Dropbox(access_token, session=s)
with open(file_from, 'rb') as f:
file_content = f.read()
dbx.files_upload(f=file_content, path=file_to, mode=WriteMode.overwrite, mute=False)
這是正在寫入 DropBox 的檔案的螢屏截圖。

我已經使用多個代理服務器嘗試了此代碼,并且每次都有效。
uj5u.com熱心網友回復:
特長;
到目前為止,我的理解是它可能是
- 錯誤使用 urllib
- 錯誤的 https 證書
解決方案(也許)
urllib 格式
如果我記得很好 urllib 在某個時候改變了他的格式
proxyDict = {
'http':'8.88.888.8:8888',
'https':'8.88.888.8:8888'
}
proxyDict = {
'https': 'https://8.88.888.8:8888',
'http': 'http://8.88.888.8:8888',
}
您是否嘗試過兩種格式?
uj5u.com熱心網友回復:
你一定有問題
- 您的代理沒有以正確的方式轉發某些內容或
- 您的訪問令牌錯誤
- Dropbox 應用設定了錯誤的權限
因為這段代碼(這基本上就是您在問題中所擁有的——即使沒有禁用 SSL 證書檢查!)在將我的訪問令牌放入環境變數 DROPBOX_ACCESS_TOKEN 的情況下作業得很好。
import dropbox
import sys
import os
DROPBOX_ACCESS_TOKEN = os.getenv('DROPBOX_ACCESS_TOKEN')
def uploadFile(fromFilePath,toFilePath):
proxy = '127.0.0.1:3128' # locally installed squid proxy server
proxyDict = {
"http": "http://" proxy,
"https": "http://" proxy # connection to proxy is http!!
}
session = dropbox.create_session(1,proxyDict)
client = dropbox.Dropbox(DROPBOX_ACCESS_TOKEN,session)
client.files_upload(open(fromFilePath, "rb").read(), toFilePath)
print("Done uploading {} to {}".format(fromFilePath,toFilePath))
if __name__=="__main__":
uploadFile(sys.argv[1],sys.argv[2])
但請注意,訪問令牌(一旦生成)具有在生成令牌時有效的權限。如果您在生成令牌后更改應用程式的權限,令牌仍將具有原始權限!
編輯:看起來,Dropbox API 足夠聰明,可以不使用代理,如果它可以直接到達目標。因此,此代碼可以與您放入 proxyDict 的任何內容一起使用,并且不清楚代碼是否有效,是否真的必須通過代理。我正在努力驗證這一點,并將相應地更新答案。
更新:我在我的 MacBook 上安裝了 squid 并在上面的代碼中使用
并重新生成保管箱令牌,使用新令牌執行相同的代碼(未更改),完成!
它與代理設定無關,只是保管箱設定!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/515434.html
