`
lykops
  • 浏览: 86346 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Python模拟浏览器上传文件脚本(Multipart/form-data格式)

 
阅读更多

http协议本身的原始方法不支持multipart/form-data请求,这个请求由原始方法演变而来的。

multipart/form-data的基础方法是post,也就是说是由post方法来组合实现的,与post方法的不同之处:请求头,请求体。

multipart/form-data的请求头必须包含一个特殊的头信息:Content-Type,且其值也必须规定为multipart/form-data,同时还需要规定一个内容分割符用于分割请求体中的多个post的内容,如文件内容和文本内容自然需要分割开来,不然接收方就无法正常解析和还原这个文件了。具体的头信息如下:

Content-Type: multipart/form-data; boundary=${bound}    

实例:

import os, random, sys, requests
from requests_toolbelt.multipart.encoder import MultipartEncoder

url = 'http://127.0.0.1/sendmsg'
argvstr = sys.argv[1:]
argv_dict = {}
for argv in argvstr :
    argv = str(argv).replace("\r\n" , "")
    DICT = eval(argv)
    argv_dict.update(DICT)

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0',
    'Referer': url
    }

multipart_encoder = MultipartEncoder(
    fields={
        'username': argv_dict['username'],
        'pwd': argv_dict['pwd'],
        'type': 'txt',
        'friendfield': argv_dict['friendfield'],
        'friend': argv_dict['friend'],
        'content': argv_dict['content'],
        'file': (os.path.basename(argv_dict['file']) , open(argv_dict['file'], 'rb'), 'application/octet-stream')
        #file为路径
        },
        boundary='-----------------------------' + str(random.randint(1e28, 1e29 - 1))
    )

headers['Content-Type'] = multipart_encoder.content_type
#请求头必须包含一个特殊的头信息,类似于Content-Type: multipart/form-data; boundary=${bound}

r = requests.post(url, data=multipart_encoder, headers=headers)
print(r.text)
#注意,不要设置cookies等其他参数,否则会报错

# 例子/usr/local/python36/bin/python3 /opt/lykchat/test_upload.py "{'username':'lykchat','pwd':'123456','type':'img','friendfield':'1','friend':'xxxx','content':'恭喜发财','file':'/root/b.jpg'}"
#等同于curl -F "file=@/root/a" 'http://127.0.0.1/sendmsg?username=lykchat&pwd=123456&type=img&friendfield=1&friend=xxxx&content=恭喜发财'
<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
分享到:
评论

相关推荐

    Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)

    Python模拟浏览器上传...通过以上知识点的介绍,可以理解如何使用Python模拟浏览器上传文件,尤其是理解了Multipart/form-data格式数据的结构和构造方式,以及如何使用Python的requests库来实现文件上传的具体步骤。

    MultipartPostHandler python 表单文件post

    在Python编程中,MultipartPostHandler是一个用于模拟HTTP POST请求,特别是处理多部分/表单数据(multipart/form-data)的工具。这种数据格式通常用于在Web表单中上传文件。在本文中,我们将深入探讨...

    上传图片的调用

    总结来说,上传图片涉及到设置`form`的`enctype`属性为`multipart/form-data`,后端接收并处理二进制数据,以及可能的图片验证和存储逻辑。这是一个涉及多技术领域的过程,需要前端、后端开发者的协同工作。

    使用HTTP上传文件到WEB服务器

    - 安全性:确保上传的文件类型安全,防止恶意文件(如病毒、脚本文件)的上传。可以通过验证文件扩展名,或者检查文件内容来进行过滤。 - 性能优化:为了提高上传速度和减少服务器压力,可以使用断点续传、多线程...

    第13章 上传文件

    这些代码示例通常涉及HTTP协议、表单提交、Multipart/form-data编码以及处理上传文件的服务器端脚本。 在HTML中,创建一个支持文件上传的表单通常需要`&lt;input type="file"&gt;`元素。这个元素让用户选择本地文件,并将...

    文件上传的

    用户在前端选择文件后,浏览器会创建一个multipart/form-data格式的数据包,包含文件内容和相关元数据,然后发送到服务器。服务器端接收到请求后解析数据包,存储文件。 2. **前端实现**: 前端通常使用HTML的`...

    文件上传下载

    1. **HTTP协议与Multipart/form-data**:文件上传通常涉及到HTTP的POST请求,而为了传输文件内容,需要使用`multipart/form-data`编码格式。这种编码方式允许在一个HTTP请求中传输多个部分的数据,每个部分之间用...

    Python-OpenRestyLua的简单multipart数据解析器

    在HTTP协议中,multipart/form-data是一种用于表单提交的格式,尤其适用于包含文件上传的情况。它将不同部分的数据(如文本、图片或文件)分割成多个部分,并在每个部分之间加上分隔符,以确保数据的完整性和可读性...

    FileUpload

    当用户提交表单时,浏览器会按照multipart/form-data格式封装数据,包括文件内容,然后发送到服务器。 2. **multipart/form-data**: 这是HTTP请求中用于传递多个部分数据的编码方式,每个部分都包含一个边界标识...

    能上传文件实用代码(注意只能是一个一个的下载)

    在表单提交时,文件数据会以`multipart/form-data`格式进行编码,确保二进制数据能够安全地传输。 2. **前端实现**:在JavaScript中,可以使用HTML5的`&lt;input type="file"&gt;`标签创建一个文件选择器。用户选择文件后...

    Web上传实例

    为了支持文件上传,表单数据需要采用`multipart/form-data`编码。这种编码方式将表单数据分割成多个部分,每部分都有一个单独的边界,以防止数据混淆。 4. **服务器端处理**: 服务器端通常使用某种编程语言(如...

    实现多个文件上传例子

    2. 文件解析:后端语言如Java、Python、Node.js等都有相应的库来解析multipart/form-data格式的数据。例如,Java中的Apache Commons FileUpload库,Python的Flask或Django框架等。 3. 文件存储:接收到文件后,...

    pythonweb上传下载文件

    &lt;form method="POST" enctype="multipart/form-data"&gt; 上传"&gt; &lt;/form&gt; &lt;/body&gt; &lt;/html&gt; ``` 在Flask应用中,接收并处理上传的文件: ```python from flask import Flask, request, render_template_string ...

    html post上传文件

    这里,`enctype="multipart/form-data"`是关键,它指定表单数据将以多部分/形式数据格式发送,这是上传文件所必需的。 二、HTTP与POST请求 当用户提交表单时,浏览器会发起一个POST请求到指定的URL(在这个例子中是...

    用 perl 实现文件上传

    - **ENCTYPE="multipart/form-data"**:这是一个关键属性,它告知浏览器使用多部分编码格式来封装表单数据,这是上传文件所必需的。 ### 后端Perl脚本处理 后端Perl脚本负责接收并处理来自前端的文件上传请求,其...

    post模拟提交图片

    在IT行业中,网络通信是不可或缺的一部分,而POST模拟提交数据是一项常见的任务,特别是在进行API测试、自动化脚本编写或者客户端与服务器交互时。本话题主要关注如何通过编程方式以字节流的形式模拟提交图片,并将...

    文件上传DEMO 可以直接拿来用的

    2. **错误处理**:处理上传失败的情况,如网络中断、文件格式不合法等,应提供友好的提示。 3. **权限验证**:服务器端应验证文件类型、大小,防止恶意文件上传,如病毒、脚本文件等。 4. **文件重命名**:为了...

    一个可以上传文件的网页(源码)

    其中,`enctype="multipart/form-data"`是关键,它指示浏览器将表单数据作为多部分/二进制数据发送,这是上传文件所必需的。 2. **服务器端处理** 文件上传的处理通常在服务器端进行,如PHP、Python、Java等后端...

    文件上传下载8个源码示例

    - **HTTP协议中的multipart/form-data**:在HTML表单中,文件上传通常使用`&lt;input type="file"&gt;`标签,并通过设置`enctype="multipart/form-data"`来启用文件上传。这种编码类型允许在请求体中发送二进制数据,如...

Global site tag (gtag.js) - Google Analytics