pangyou123456 2023-07-13 11:59 采纳率: 16.7%
浏览 49
已结题

python 如何通过POST上传EXCEL文件到网站,请帮修改下代码

python 如何通过POST上传EXCEL文件到网站,不懂如何写,抓包软件抓到RAW信息如下:



POST http://10.184.19.2:8000/api/tc-config-biz/FileOperateController/uploadFiles HTTP/1.1
Host: 10.184.19.2:8000
Authorization: Bearer 580131a9-30c9-4b39-9d82-c1af8341eeb5
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary26TicDu5Peqo2sb7
Accept: /
Origin: http://10.184.19.2:8000/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9

------WebKitFormBoundary26TicDu5Peqo2sb7
Content-Disposition: form-data; name="attachment"

{"url":"sheet/gt/","bucketName":"nctc"}
------WebKitFormBoundary26TicDu5Peqo2sb7
Content-Disposition: form-data; name="context"

{"userUuid":"pangyou","userName":"pangyou","userIp":"","serverId":"","metaUuid":""}
------WebKitFormBoundary26TicDu5Peqo2sb7
Content-Disposition: form-data; name="file"; filename="产品使用情况.xlsx"
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet


```python
header = {
    'Authorization':'bearer 580131a9-30c9-4b39-9d82-c1af8341eeb5',
    'Connection': 'keep-alive',
    'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundary26TicDu5Peqo2sb7',
    'Host': '10.184.19.2:8000',
    'Origin': 'http://10.184.19.2:8000',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}


#上传文件
url='http://10.184.19.2:8000/api/tc-config-biz/FileOperateController/uploadFiles'
filename='产品使用情况.xlsx'
filepath='D:/pycharm/yunwei_ceshi/产品使用情况.xlsx'

body={
      'bucketName':"nctc",
      "url":"sheet/gt/"
}
with open(filepath,'rb') as f_:
    m= MultipartEncoder(
        fields={
            "userUuid": "pangyou",
            "userName": "pangyou",
            "userIp": "",
            "serverId": "", "metaUuid": "",
        'file':(filename,f_,'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')}
        )
    response=requests.post(url,headers=header,json=body,data=m,timeout=None,verify=False)
    print(m.content_type)
print (response.text)

```

  • 写回答

3条回答 默认 最新

  • PhoenixRiser 2023-07-13 12:38
    关注

    TechWhizKid参考GPT回答:

    • 用requests库来上传文件。例子,根据情况调整:

    • 这里有个注意事项:requests库中,提供了MultipartEncoder类来处理multipart/form-data类型的请求,这个类是用来处理要上传的文件和其他数据。并且会自动生成boundary。

    • 'Content-Type': m.content_type在header中设置这个自动生成的boundary,而不是手动设置。

    在你的情况中,以下是修改后的代码:

    import requests
    from requests_toolbelt.multipart.encoder import MultipartEncoder
    
    url='http://10.184.19.2:8000/api/tc-config-biz/FileOperateController/uploadFiles'
    filename='产品使用情况.xlsx'
    filepath='D:/pycharm/yunwei_ceshi/产品使用情况.xlsx'
    
    header = {
        'Authorization':'Bearer 580131a9-30c9-4b39-9d82-c1af8341eeb5',
        'Connection': 'keep-alive',
        'Host': '10.184.19.2:8000',
        'Origin': 'http://10.184.19.2:8000',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
    }
    
    with open(filepath,'rb') as f_:
        m = MultipartEncoder(
            fields={
                "attachment": '{"url":"sheet/gt/","bucketName":"nctc"}',
                "context": '{"userUuid":"pangyou","userName":"pangyou","userIp":"","serverId":"","metaUuid":""}',
                'file':(filename,f_,'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')}
            )
        header['Content-Type'] = m.content_type  # 增加一行来设置boundary
    
        response=requests.post(url,headers=header,data=m,timeout=None,verify=False)
    
        print (response.text)
    
    • 上述代码将文件数据和其他数据一并通过MultipartEncoder打包,并且在header中设置了正确的'Content-Type'。

    • 你要确保你的requests库和requests_toolbelt库是最新的。以下命令更新:

    pip install --upgrade requests
    pip install --upgrade requests_toolbelt
    

    你可以按照上述方式试试看是否可以解决你的问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月21日
  • 已采纳回答 7月13日
  • 创建了问题 7月13日