<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        Python發(fā)送form-data請求及拼接form-data內(nèi)容的方法

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 14:35:39
        文檔

        Python發(fā)送form-data請求及拼接form-data內(nèi)容的方法

        Python發(fā)送form-data請求及拼接form-data內(nèi)容的方法:網(wǎng)上關(guān)于使用python 的發(fā)送multipart/form-data的方法,多半是采用 ulrlib2 的模擬post方法,如下: import urllib2 boundary='-------------------------7df3069603d6' data=[] data.append('--%s' % boun
        推薦度:
        導(dǎo)讀Python發(fā)送form-data請求及拼接form-data內(nèi)容的方法:網(wǎng)上關(guān)于使用python 的發(fā)送multipart/form-data的方法,多半是采用 ulrlib2 的模擬post方法,如下: import urllib2 boundary='-------------------------7df3069603d6' data=[] data.append('--%s' % boun

        網(wǎng)上關(guān)于使用python 的發(fā)送multipart/form-data的方法,多半是采用

        ulrlib2 的模擬post方法,如下:

        import urllib2
        
        boundary='-------------------------7df3069603d6' 
        data=[] 
        data.append('--%s' % boundary) 
        data.append('Content-Disposition: form-data; name="app_id"
        ') 
        data.append('xxxxxx') 
        data.append('--%s' % boundary) 
        data.append('Content-Disposition: form-data; name="version"
        ') 
        data.append('xxxxx') 
        data.append('--%s' % boundary) 
        data.append('Content-Disposition: form-data; name="platform"
        ') 
        data.append('xxxxx') 
        data.append('--%s' % boundary) 
        data.append('Content-Disposition: form-data; name="libzip"; filename="C:Usersdanwang3Desktoplibmsc.zip"') 
        data.append('Content-Type: application/octet-stream
        ') 
         
        fr=open('C:Usersdanwang3Desktoplibmsc.zip') 
        content=fr.read() 
        data.append(content) 
        print content 
        fr.close() 
        data.append('--%s--
        '%boundary) 
        httpBody='
        '.join(data) 
         
        print type(httpBody) 
        print httpBody 
         
        postDataUrl='http://xxxxxxxx' 
        req=urllib2.Request(postDataUrl,data=httpBody) 
        
        

        經(jīng)過測試,使用上述方法發(fā)送一段二進(jìn)制文件的時候,服務(wù)器報錯,數(shù)據(jù)有問題!

        問題就出在 ' '.join(data)的編碼,data內(nèi)部擁有二進(jìn)制數(shù)據(jù),通過這種編碼,可能是把數(shù)據(jù)轉(zhuǎn)換為utf-8格式,當(dāng)然有問題。

        搜索了很多資料,查到可以使用requests庫提交multipart/form-data 格式的數(shù)據(jù)

        一個multipart/form-data 的表單數(shù)據(jù),在http里面抓包如下:

        #Content-Disposition: form-data;name="app_id"
        
        
         123456
        
        #-----------------------------7df23df2a0870
        
        #Content-Disposition: form-data;name="version"
        
         
        
         2256
        
         -----------------------------7df23df2a0870
        
         Content-Disposition:form-data; name="platform"
        
         
        
         ios
        
         -----------------------------7df23df2a0870
        
         Content-Disposition: form-data;name="libzip";filename="C:Usersdanwang3Desktoplibmsc.zip"
        
         Content-Type: application/x-zip-compressed
        
        

        <二進(jìn)制文件數(shù)據(jù)未顯示>

         ---------------------------7df23df2a0870—
        
        


        上述數(shù)據(jù)在requests里面可以模擬為:

        files={'app_id':(None,'123456'),
         'version':(None,'2256'),
         'platform':(None,'ios'),
         'libzip':('libmsc.zip',open('C:Usersdanwang3Desktoplibmsc.zip','rb'),'application/x-zip-compressed')
         }
        
        

        發(fā)送上述post請求,也就是簡單的

        response=requests.post(url,files=files)
        
        

        就這么簡單

        在官方網(wǎng)站上,requests模擬一個表單數(shù)據(jù)的格式如下:

        files = {'name': (, ,, )}

        這一行模擬出來的post數(shù)據(jù)為:

        Content-Disposition: form-data; name='name';filename=
        Content-Type: 
         
        
        --boundary
        

        如果filename 和 content-Type不寫,那么響應(yīng)模擬post的數(shù)據(jù)就不會有二者。

        通常使用requests 不像使用urllib2那樣可以自動管理cookie,不過如果獲取到cookie

        可以在requests請求里面一并將cookie發(fā)送出去

        requests使用的cookie格式如下:

        newCookie={}
        newCookie['key1']='value1'
        newCookie['key2]='value2'
        newCookie['key3']='value3'
        
        


        發(fā)送cookie可以使用:

        response=requests.post(url,cookies=newCookie)
        
        

        這樣就可以了

        拼接form-data的post內(nèi)容

        #!ursinenv python 
        #encoding:utf-8 #設(shè)置編碼方式 
         
        from http2 import http 
        import urllib 
         
        def ReadFileAsContent(filename): 
         #print filename 
         try: 
         with open(filename, 'rb') as f: 
         filecontent = f.read() 
         except Exception, e: 
         print 'The Error Message in ReadFileAsContent(): ' + e.message 
         return '' 
         return filecontent 
         
         
        def get_content_type(filename): 
         import mimetypes 
         return mimetypes.guess_type(filename)[0] or 'application/octet-stream' 
         
        def isfiledata(p_str): 
         import re 
         
         r_c = re.compile("^f'(.*)'$") 
         rert = r_c.search(str(p_str)) 
         #rert = re.search("^f'(.*)'$", p_str) 
         if rert: 
         return rert.group(1) 
         else: 
         return None 
         
        def encode_multipart_formdata(fields): 
         ''''' 
         該函數(shù)用于拼接multipart/form-data類型的http請求中body部分的內(nèi)容 
         返回拼接好的body內(nèi)容及Content-Type的頭定義 
         ''' 
         import random 
         import os 
         BOUNDARY = '----------%s' % ''.join(random.sample('0123456789abcdef', 15)) 
         CRLF = '
        ' 
         L = [] 
         for (key, value) in fields: 
         filepath = isfiledata(value) 
         if filepath: 
         L.append('--' + BOUNDARY) 
         L.append('Content-Disposition: form-data; name="%s"; filename="%s"' % (key, os.path.basename(filepath))) 
         L.append('Content-Type: %s' % get_content_type(filepath)) 
         L.append('') 
         L.append(ReadFileAsContent(filepath)) 
         else: 
         L.append('--' + BOUNDARY) 
         L.append('Content-Disposition: form-data; name="%s"' % key) 
         L.append('') 
         L.append(value) 
         L.append('--' + BOUNDARY + '--') 
         L.append('') 
         body = CRLF.join(L) 
         content_type = 'multipart/form-data; boundary=%s' % BOUNDARY 
         return content_type, body 
        

        其中需要注意的是文件數(shù)據(jù)的字典值,其格式為f'/path/to/file',具體調(diào)用的形式如下:

        form_data = [('gShopID','489'),("addItems", r"f'D:case3guomei.xml'"), ('validateString', '92c99a2a36f47c6aa2f0019caa0591d2')] 
        form_data_re = encode_multipart_formdata(form_data) 
        print form_data_re 
        

        返回的內(nèi)容是一個元組,第一個參數(shù)是請求頭中Content-Type的值,第二個是具體post的內(nèi)容。然后使用httplib的post方法就可以發(fā)送了。

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Python發(fā)送form-data請求及拼接form-data內(nèi)容的方法

        Python發(fā)送form-data請求及拼接form-data內(nèi)容的方法:網(wǎng)上關(guān)于使用python 的發(fā)送multipart/form-data的方法,多半是采用 ulrlib2 的模擬post方法,如下: import urllib2 boundary='-------------------------7df3069603d6' data=[] data.append('--%s' % boun
        推薦度:
        標(biāo)簽: 發(fā)送 請求 的方法
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 美女被吸屁股免费网站| 亚洲日本在线播放| 免费看黄福利app导航看一下黄色录像| 免费观看黄色的网站| 亚洲视频一区网站| 91九色视频无限观看免费| 亚洲大尺码专区影院| 成年女人18级毛片毛片免费 | 亚洲国产成人久久综合| 在线免费观看毛片网站| 亚洲AV无码一区二区大桥未久| 国产免费牲交视频| 国产精品高清免费网站| 国产亚洲精品xxx| 最近免费mv在线电影| 国产91在线|亚洲| 无码欧精品亚洲日韩一区夜夜嗨| a高清免费毛片久久| 亚洲国产精品无码久久一区二区 | 午夜精品免费在线观看| 亚洲毛片免费观看| 国产精品冒白浆免费视频| 欧洲美女大片免费播放器视频 | 亚洲午夜久久久精品影院| 0588影视手机免费看片| 亚洲国产精品成人综合色在线| 亚洲福利精品一区二区三区 | 朝桐光亚洲专区在线中文字幕| 亚洲国产日韩在线观频| 久久亚洲免费视频| 亚洲中文字幕无码av| 日本亚洲国产一区二区三区| 亚洲啪啪免费视频| 无遮挡a级毛片免费看| 亚洲欧洲一区二区| 国产一区二区三区免费视频| a级毛片黄免费a级毛片| 亚洲成a人片在线不卡一二三区| 久久综合亚洲色HEZYO国产| 久久99九九国产免费看小说| 免费无码午夜福利片69|