HTTP(マルチパート/フォームデータ)ファイルのアップロードにより、パイソンの方法

PythonはどのようにPythonライブラリ要求を経由してファイルをアップロードする方法を、次のことを紹介し、今日ブログを書く、HTTP経由でファイルをダウンロードする方法だと、前にブログを書きました

ここでは主に、ファイルのアップロード、ファイルアップロードのmultipart / form-data形式を解決するための基本的なHTTPプロトコル今基本的にこの形式をアップロード

まず、アイデア

私たちはアドレスにファイルをアップロードする場合、一般的に、あなたは成功した着陸にログインする必要があり、得たクッキーは、その後、ファイルをアップロードする要求にクッキーを運びます。

その後、我々はその後、シオマネキ、キャプチャパケットは、ファイルをアップロードするために私たちの要求を投稿組み立て従って、より多くの保険になり、使用シオマネキに、この時のパケットキャプチャツールを覚えて、ファイルをアップロードするためにブラウザを介してサイトを必要とします

これは、原理はこれです取る:ポスト要求では、パラメータ・ファイルを受け入れるようにパラメータファイルを使用して、データのJSONパラメータによって関連オブジェクト他の身体パラメータにポストを受け入れる/要求します。

第二に、実現

1つの要求、使用requests.session()ターゲット着陸地点、これはオブジェクトに直接ファイルをアップロードするには、次の送信ポストの便宜のために主に、我々はリクエストボディにクッキーを追加する必要はありません

インポート要求

S = requests.session()
RES1 = s.post(
    URL = "http://10.222.222.7/src/welcome.php"、
    ヘッダー= { 
        "受け入れ":「text / htmlの、アプリケーション/ XHTML + XML 、アプリケーション/ XML、Q = 0.9、画像/ WEBP、画像/ APNG、* / *; Q = 0.8、アプリケーション/署名され交換; V = B3" 、
        "同意エンコード": "GZIP、DEFLATE"、
        「同意-language ": "ZH-CN、ZH; = 0.9 Q"、
        "のCache-Control": "MAX-年齢= 0"、
        "接続": "キープアライブ"、
        "Content-Typeの":"アプリケーション/ X -www-form-urlencodedで" 
        "ホスト": "10.222.222.7"、
        "起源":"のhttp://10.222.222。7" 、 
        "リファラー": "http://10.222.222.7/src/welcome.php"、
        "アップグレード・安全でない-要求": "1"、
        "User--エージェント": "Mozillaの/ 5.0(Windows NTの6.1; WOW64)のAppleWebKit / 537.36(KHTML、ヤモリなど)クローム/ 76.0.3809.87サファリ/ 537.36" 
    }、
    データ= { 
        "名": "ADMIN"、
        「パスワード「:」ADMIN「
        『ボタン『:』ログイン』、
        『OPR『:』ログイン』、
    }、
    ここで#は、プロキシを設定するには、私のOSを使用して、我々が取得する必要がありますことを言わなかったことを、シオマネキインストールので
    プロキシ= { 
        」HTTP ":" http://127.0.0.1:8888」、
        "HTTPS ":" http://127.0.0.1:8888" 
    } 

  

 

 

 

2、手動シオマネキ取り込み、解析パラメータのhttpリクエストによりアップロード

 

 

上記のRAW形式のhttpリクエストで、私たちは、httpリクエストWebフォームの一般的なフォーマットを見ていきます

 

 

分析が完了した後3、我々はコードを見ることができます

import json
file = {
    "sample_file": open("D:\\abdi\\37571.pcap", "rb"),
    "Content-Type": "application/octet-stream",
    "Content-Disposition": "form-data",
    "filename" : "3757.pcap"
}
# #


res = s.post(
    url="http://10.222.222.7/src/system_sample.php/system_sample/add",
    headers = {
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
        "Accept-Encoding": "gzip, deflate",
        "Accept-Language": "zh-CN,zh;q=0.9",
        "Cache-Control": "max-age=0",
        "Connection": "keep-alive",
        # "Content-Type": "multipart/form-data",
        "Host": "10.222.222.7",
        "Origin": "http://10.222.222.7",
        "Referer": "http://10.222.222.7/src/html.php/html/system_samples",
        "Upgrade-Insecure-Requests": "1",
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36"
    },

    files = file,
    data = {
        "sample_name" : "37571.pcap",
        "owner_group" : "/data/atp/pcap/custom/test",
        "type" : "1",
        "sample_file_path" : "",
        "description_file_path" : "",
        # "description_file":""
    },
    proxies = {
        "http":"http://127.0.0.1:8888",
        "https":"http://127.0.0.1:8888"
    }

)

  

这里有三个关键的地方

a、data参数,注意看k值和抓包中的对比

 

 

 

 

不同的网站的name的值可能不一样,但是大部分大家都会用file,但是有时候开发人员也不会按照常规套路来做,所以我们不能想当然就认为是files。要通过抓包分析

这个值一般就是上传后的文件的名称;其他几个参数的意义就不重要了,你要根据具体的情况分析组装上传就可以了

 

b、files参数,这里很关键,这里就是我们上传的文件对象了

 

 

 

 

 

sample_file这个参数就代表文件文件对象

 

 

c、content-type参数,如果我们通过form-data的方式上传文件,我们组装post请求的时候,headers这个参数中一定不能要包括这个值,由requests库帮添加这个元素

如果我们自作聪明,会导致上传失败的,这里非常重要!!!


大家可以看到,我在代码中没有传递content-type这个参数,但是抓包是有这个参数的,所以这个参数我们一定不能加

 

 

 实际抓包有这个参数

 

 

4、实际上传抓包验证即可,和浏览器上传略有不同,但是不影响上传

 

おすすめ

転載: www.cnblogs.com/bainianminguo/p/12099532.html