python實現form-data格式文件/非文件上傳

文件格式上傳方法

    def test_upload_file(self):
        url = "http://www.baidu.com/"
        files = {'file': ('test.xls', open("test.xls", 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
        headers = {"Access-Token": hsj_token}
        #注意 headers裏主要註釋掉Content-type纔可以上傳成功
        r = requests.post(url=url, files=files, headers=headers)
        print(r.text)

非文件格式上傳

    def format(self, data, headers):
        if "Content-Type" in headers:
            fd_val = str(headers['Content-Type'])
            if "boundary" in fd_val:
                fd_val = fd_val.split(";")[1].strip()
                boundary = fd_val.split("=")[1].strip()
            else:
                raise Exception("multipart/form-data信息頭錯誤")
        # form-data格式定式
        json_str = '--{}\r\nContent-Disposition:form-data;name="{}"\r\n\r\n{}\r\n'
        end_str = "--{}--".format(boundary)
        args_str = ""
        if not isinstance(data, dict):
            raise Exception("multipart/form-data參數錯誤,data參數應爲dict類型")
        for key, value in data.items():
            args_str = args_str + json_str.format(boundary, key, value)

        args_str = args_str + end_str.format(boundary)
        args_str = args_str.replace("\'", "\"")
        print("args_Str:", args_str)
        return args_str


    #非文件格式的formdata上傳
    def test_upload_nofiles(self):
    form_headers = {"Access-Token": hsj_token,
               "Content-Type":"multipart/form-data; boundary=----  WebKitFormBoundaryEDDSDGEAQA3QP999"}
        url = "http://www.baidu.com"
        params = {"project":38}
        payload = self.format(params,form_headers)
        r = requests.post(url,data=payload,params=params,verify=False,headers=form_headers)
        result = r.json()
        print("result:",result)

參考文檔:

https://blog.csdn.net/Chihwei_Hsu/article/details/81943008 (非文件上傳)

https://blog.csdn.net/qq_39802740/article/details/84257745 (文件上傳)

https://requests.readthedocs.io/zh_CN/latest/user/quickstart.html#post-multipart-encoded

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章