【问题标题】:Sharepoint file upload with API using Python使用 Python 使用 API 上传 Sharepoint 文件
【发布时间】:2020-05-13 17:44:21
【问题描述】:

我想要的是通过 API 并使用 python 将文件上传到共享点中的特定目录。

这是我的代码:

import requests
from shareplum import Office365
from config_s import config_s

# get data from config_suration
username = config_s['sp_user']
password = config_s['sp_password']
site_name = config_s['sp_site_name']
base_path = config_s['sp_base_path']
doc_library = config_s['sp_doc_library']

file_name = "/Users/Metatrons/Desktop/AutoReport_Structure/test.csv"

# Obtain auth cookie
authcookie = Office365(base_path, username=username, password=password).GetCookies()
session = requests.Session()
session.cookies = authcookie
session.headers.update({'user-agent': 'python_bite/v1'})
session.headers.update({'accept': 'application/json;odata=verbose'})

session.headers.update({'X-RequestDigest': 'FormDigestValue'})#FormDigestValue
response = session.post( url=base_path + "/sites/" + site_name + "/_api/web/GetFolderByServerRelativeUrl('" + doc_library + "')/Files/add(url='a.txt',overwrite=true)",
                         data="")
session.headers.update({'X-RequestDigest': response.headers['X-RequestDigest']})

# perform the actual upload
with open( file_name, 'rb') as file_input:
    try: 
        response = session.post( 
            url=base_path + "/sites/" + site_name + "/_api/web/GetFolderByServerRelativeUrl('" + doc_library + "')/Files/add(url='" 
            + file_name + "',overwrite=true)",
            data=file_input)
        print(response)
        print(response.headers)
        #print(response.headers['X-RequestDigest'])
    except Exception as err: 
        print("Some error occurred: " + str(err))
        print("What the  FUUUUUUUUUUUUCK")

我得到消息

** 响应 [400]

{'Cache-Control': 'private, max-age=0', '传输编码':'分块', '内容类型': 'application/json;odata=verbose;charset=utf-8', '过期':'星期一,2020 年 4 月 27 日 05:58:55 GMT', 'Last-Modified': '2020 年 5 月 12 日星期二 05:58:55 GMT', 'P3P': 'CP="ALL IND DSP COR ADM CONo CUR CUSo IVAo IVDo PSA PSD TAI TELo OUR SAMo CNT COM INT NAV ONL PHY PRE PUR UNI"', 'Set-Cookie': 'rtFa=v+WfHj06vOlD59P0qVwsXStksrafJI486yruddHryI0mOTk4NkVEMTItMjc3MS00RTY2LThCNUUtQTIwODBENkIyN0U3bZhIUWlknsxj7X5UIUNUvMimHWhZd/gZoFgaZg5Dr4Wm/QbeuGwyrg5iFuo9Pt5IGannrRBEyxwiSaUwPrgHhkRrlkAnf6N6+3tS7eSnl7ebzMkkIar20aS/LCZRs8Z/UNFD/pj8ptYvwspbCDNz/m/gA5tdhlURmKCeqN94Ry16SR+7KjuAFnrfNHEMYjHsh9CotruRb4jQUEQOkVNLuHIabuq3qNJLWv4CQA/JM3LHW528rf/tR64zzKHRIqfdziTzCRnndQP9+5YzMk0jFFfslLjmjvMMO19yQ1m70+T8l/qyQk5GOMkFcw3Zw9hihPpC29SDuTts46lDBVWqOkUAAAA=;域=sharepoint.com;路径=/;相同站点=无;安全的; HttpOnly, FedAuth=77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48U1A+VjgsMGguZnxtZW1iZXJzaGlwfDEwMDMyMDAwNDM3YWM3NTVAbGl2ZS5jb20sMCMuZnxtZW1iZXJzaGlwfHdhZGUuY2hlbkB2cG9uLmNvbSwxMzIzMzczNjczNDAwMDAwMDAsMTMxOTkxNjM2MzYwMDAwMDAwLDEzMjMzODIzMTM0ODg1NDAzMywwLjAuMC4wLDIsOTk4NmVkMTItMjc3MS00ZTY2LThiNWUtYTIwODBkNmIyN2U3LCwsM2M5YTUxOWYtNzA4NS1hMDAwLTNlMzYtMGZmYjRkZTcwMGYzLDNjOWE1MTlmLTcwODUtYTAwMC0zZTM2LTBmZmI0ZGU3MDBmMywsMCwwLDAsLCwsMjY1MDQ2Nzc0Mzk5OTk5OTk5OSwwLCxqNGxubjhXdDR2bVZOcXFTaHNHWDR1b25Ud0dDWjJnamRWdFdMUk1UeU1Xa1c0U3FrMW10dGl6Wkk5cnNUTW9rWnBuSmxOVVNvRVZadUthNTBhK2FBSmtLbWJUQkJwUjd1enh5dHRXNWhFZkpCU2NXeHFBajZzaDVjNk84TmRJY203UEkwRnF6SUl5djFVRFlISEF1SWc0dGJFVitwTzlIVnJ1cU9ncTVzQURXL2p0MmpXZXBJb0pmb2pkMlNVUEt2RU9JWnY5RWRMY3R5bTJkR2FrZGFWbHdDNHFSNllyczVOM05WTGhqalpRb3RKLzFldEpZSldlT0Q4bEpVQy8vZlpDYnE1TUVpb2ROcHo1eC92UTQ1WWZiWmg1UVU2clFpNUZzQytCUU1MUmpqdEtia1IxU090WXY2amNkZ3pQcDlZNjJsMlpHQ2piaXNzdHl2RDJMUHc9PTwvU1A+;路径=/;相同站点=无;安全的; HttpOnly', 'X-SharePointHealthScore': '0', 'X-SP-SERVERSTATE': 'ReadOnly=0', 'DATASERVICEVERSION': '3.0', 'SPClientServiceRequestDuration': '54', 'X-AspNet-版本': '4.0.30319', 'SPRequestGuid': '3c9a519f-00ce-a000-89f2-6080347e58ff', 'request-id': '3c9a519f-00ce-a000-89f2-6080347e58ff', 'MS-CV': 'n1GaPM4AAKCJ8mCANH5Y/w.0', 'X-RequestDigest': '0x26237158F71B34858BF0EB713CDA5A9412C28A5AC95FF342B326F7B8DE04DD93AA4E233004444AC0D7BF427E2D05BDA4B526CB2BF8BB32D73F8917E9CC88F495,12 May 2020 05:58:56 -0000', '严格传输安全':'max-age = 31536000', 'X-FRAME-OPTIONS': 'SAMEORIGIN', 'X-Powered-By': 'ASP.NET', 'MicrosoftSharePointTeamServices': '16.0.0.20029', 'X-Content-Type-Options': 'nosniff', 'X-MS-InvokeApp': '1;要求只读', 'X-MSEdge-Ref':'参考 A:DFB58EAF5C2D4ECB8027CD2E3348A80C 参考 B:TPE30EDGE0216 参考 C:2020-05-12T05:58:55Z', “日期”:“格林威治标准时间 2020 年 5 月 12 日星期二 05:58:55”} **

请帮我解决这个问题,谢谢!

【问题讨论】:

    标签: python sharepoint


    【解决方案1】:

    请参考以下示例,我已在我的 SPO 环境中对其进行了测试。

    import requests
    from shareplum import Office365
    from config import config
    
    # get data from configuration
    username = config['sp_user']
    password = config['sp_password']
    site_name = config['sp_site_name']
    base_path = config['sp_base_path']
    doc_library = config['sp_doc_library']
    
    file_name = "test.html"
    # Obtain auth cookie
    authcookie = Office365(base_path, username=username, password=password).GetCookies()
    session = requests.Session()
    session.cookies = authcookie
    session.headers.update({'user-agent': 'python_bite/v1'})
    session.headers.update({'accept': 'application/json;odata=verbose'})
    
    # dirty workaround.... I'm getting the X-RequestDigest from the first failed call
    session.headers.update({'X-RequestDigest': 'FormDigestValue'})
    response = session.post( url=base_path + "/sites/" + site_name + 
    "/_api/web/GetFolderByServerRelativeUrl('" + doc_library + 
    "')/Files/add(url='a.txt',overwrite=true)",
                         data="")
    session.headers.update({'X-RequestDigest': response.headers['X-RequestDigest']})
    
    # perform the actual upload
    with open( r'C:\Users\mengfeik\Documents\test.html', 'rb+') as file_input:
    try: 
        response = session.post( 
            url=base_path + "/sites/" + site_name + "/_api/web/GetFolderByServerRelativeUrl('" + doc_library + "')/Files/add(url='" 
            + file_name + "',overwrite=true)",
            data=file_input)
    except Exception as err: 
        print("Some error occurred: " + str(err))
    
    print('end...')
    

    【讨论】:

    • 谢谢,你解决了我的问题!我想问一下我收到了响应 403。错误消息是:'X-Forms_Based_Auth_Return_Url':'https://{domain}.com/_layouts/15/error.aspx','X-MSDAVEXT_Error': '917656;访问+拒绝。+之前+打开+文件+in+this+location%2c+you+must+first+browse+to+the+web+site+and+select+the+option+to+login+automatically。我不知道如何解决这个问题。我已经调查了一些网站以获取 undocumented-features.com/2019/12/02/… 等信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 2014-07-31
    相关资源
    最近更新 更多