Python爬虫关于网站上传图片: Content-Type: multipart/form-data; boundary=----WebKitFormBoundary****************

这篇具有很好参考价值的文章主要介绍了Python爬虫关于网站上传图片: Content-Type: multipart/form-data; boundary=----WebKitFormBoundary****************。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我们在使用python爬虫, 例如使用requests想服务器发送请求,模拟上传图片的时候会遇到Reqest Headers 中有一个:Content-Type: multipart/form-data; boundary=----WebKitFormBoundary****************,  尝试这从其它返回的接口中也找不到它,

Python爬虫关于网站上传图片: Content-Type: multipart/form-data; boundary=----WebKitFormBoundary****************,爬虫

我们也一度怀疑是否是在前端JS中生成的,不要着急! 只是向服务端上传一个照片, API接口没必要设计的这么复杂把!!哈哈哈,

首先我们先观察一下请求的URL地址以及携带的data数据:

小伙伴们观察数据的时候要以自己爬取的目标网站为准哦!

Python爬虫关于网站上传图片: Content-Type: multipart/form-data; boundary=----WebKitFormBoundary****************,爬虫

Python爬虫关于网站上传图片: Content-Type: multipart/form-data; boundary=----WebKitFormBoundary****************,爬虫

我们发现它是携带着  thumbnail_icon 和 thumbnail 参数向 https:// xxxxxxx 的ajax接口发送了一个patch 请求, 携带的 thumbnail 的值为空, 而thumbnail 的值就是要上传的图片了。

这时候, 我们需要用到, random, string, 以及 requests_toolbelt 模块中的 MultipartEncoder 这个类

第一步: pip install requests_toolbelt 模块

代码如下:

import requests
import random
import string
from requests

url = 'https:// xxxxxxxxx'

# 定义 fields 用来加密
fields = {
    'thumbnail_icon': '',

     # 注意如果是jpeg 则:image/jpeg
    'thumbnail': ('图片.png', open('图片.png', 'rb'), 'image/png'),

}

# 生成 boundary内容, 
boundary = '----WebKitFormBoundary' + ''.join(random.sample(string.ascii_letters + string.digits, 16))

m = MultipartEncoder(fields=fields, boundary=boundary)

headers = {
    "Content-Type": m.content_type
}
response = requests.patch(url, headers=headers, data=m)
print(response.status_code)

其中:    ''.join(random.sample(string.ascii_letters + string.digits, 16))

string.ascii_letters 返回的是 a-zA-Z 的字符串

string.digits 返回的是 0123456789  字符串

不明觉厉,

string.ascii_letters + string.digits  返回的就是 a-zA-Z0-9 的字符串啦

然后再使用random.sample() 方法,随机从此字符串中获取 16 个字符, 返回的则是一个列表,

使用 ''.join()方法, 转换列表为字符串, 再和 前面的 ----WebKitFormBoundary 做一个拼接, 就完成了我们的boundary 值了,

然后使用 MultipartEncoder(fields=fields, boundary=boundary) 将我们要上传的图片参数,以及生成的boundary传入此类中, 然后使用返回的 m对象,调用器 content_type 属性,就能获取Content-Type 的值了, 这样,我们就能成功模拟发送请求了!!!

================================================================

还有一种情况是不带 image 向服务器发送 multipart/form-data 的情况。

Python爬虫关于网站上传图片: Content-Type: multipart/form-data; boundary=----WebKitFormBoundary****************,爬虫

Python爬虫关于网站上传图片: Content-Type: multipart/form-data; boundary=----WebKitFormBoundary****************,爬虫

我们发现只向服务器发送了一个 description_is_active 参数, 值为 True, 没有携带任何的图片,

那么我们就不能使用MultiparEncoder()类来完成初始化了,

代码实现如下:文章来源地址https://www.toymoban.com/news/detail-757844.html

# 我们需要将headers 请求头中的Content-Type 注释掉, 这个参数是由服务端为我们生成的,加上会报错

data = {
    "description_is_active": (None, True)
}

headers_data = {
    
    # 一定不要加Content-Type, 不然会报错
    'Authorzation': xxx,
    'User-Agent': xxx,
}

# 直接调用requests 发送请求即可, 携带参数使用files形参
requests.patch(url, headers=headers, files=data)

到了这里,关于Python爬虫关于网站上传图片: Content-Type: multipart/form-data; boundary=----WebKitFormBoundary****************的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于前端如何下载后端接口返回content-type为application/octet-stream的文件

    后端接口定义为直接返回一个文件,如果带认证信息可以直接通过浏览器url下载,但是接口需要传headers认证信息,url上又不支持传相关信息 前端正常请求接口,设置responseType值为blob,这样取到接口返回的数据为Blob类型,之后通过由blob数据创建一个指向类型数组的URL来完成

    2024年02月03日
    浏览(53)
  • python实现Content-Type:application/octet-stream

    Content-Type:application/octet-stream 这种传输用于图片|文本传输: 我也是在操作河马云手机中,往云机传输图片和文本txt遇到的。 “”\\\"==============================================================\\\"\\\"\\\" 接下来python实现下: 首先要先安装:requests-toolbelt 图片: 文本:

    2024年02月16日
    浏览(57)
  • 【Python Flask/postman:request中post的header:Content-type=“text/plain”报错及解决方法】

    python Flask构建restful API接口服务,通过postman进行接口服务验证测试 提示:这里描述项目中遇到的问题: 验证接口调用text/plain时出现报错 源代码(错误): 报错1: TypeError: ‘bytes’ object is not callable 报错1原因: 类中函数名或者变量名重用(即变量名和函数名有重复) 根据

    2023年04月08日
    浏览(55)
  • Content-Type 值有哪些?

    1、application/x-www-form-urlencoded 最常见 POST 提交数据的方式。 浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。 Cntent-Type 被指定为 application/x-www-form-urlencoded。 其次,提交的数据按照【name=小草莓other=hahah】的方式进行编

    2024年02月06日
    浏览(55)
  • 前端篇-Content-Type 详解

    Content-Type(MediaType),即是Internet Media Type,互联网媒体类型,也叫做MIME类型。在互联网中有成百上千中不同的数据类型,HTTP在传输数据对象时会为他们打上称为MIME的数据格式标签,用于区分数据类型。最初MIME是用于电子邮件系统的,后来HTTP也采用了这一方案。 在HTTP协议

    2024年04月27日
    浏览(49)
  • http中的Content-Type类型

    最近在做web端下载的时候需要给前端返回一个二进制的流,需要在请求头中设置一个 那么http中的Content-Type有具体有哪些呢?他们具体的使用场景又是怎样的呢? MediaType,即是Internet Media Type,互联网媒体类型;也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请

    2024年02月06日
    浏览(54)
  • 详解Http的Content-Type

    目录 1.概述 2.常用类型 2.1.application/x-www-form-urllencoded 2.2.application/json 3.Spring MVC支持的编码 3.1.实验 3.2.适配器 3.3.自定义适配器 HTTP(HyperText Transfer Protocol),超文本传输协议。超文本(Hypertext)是一种结构化的文本,其中包含了超链接(Hyperlink)的能力,通过超链接可以在不

    2024年02月09日
    浏览(40)
  • Http Content-type 对照表

    文件扩展名 Content-Type(Mime-Type) 文件扩展名 Content-Type(Mime-Type) .*( 二进制流,不知道下载文件类型) application/octet-stream .tif image/tiff .001 application/x-001 .301 application/x-301 .323 text/h323 .906 application/x-906 .907 drawing/907 .a11 application/x-a11 .acp audio/x-mei-aac .ai application/postscript .aif audio/aiff

    2024年02月09日
    浏览(45)
  • content-type几种常见类型区别

    Content-Type叫做MIME(mediaType)类型,使用Content-Type来表示请求和响应中的媒体类型信息。如果是请求头,它用来告诉服务端如何处理请求的数据,如果是响应头,它用来告诉客户端(一般是浏览器)如何解析响应的数据。下面我们来介绍下常用的几种类型! 1.application/x-www-form

    2024年02月03日
    浏览(49)
  • 前端知识~Content-Type和Accept

    Content-Type和Accept是两个HTTP标头(HTTP headers),用于在HTTP请求和响应之间传递有关请求的数据类型和响应的首选内容类型的信息。这两个标头在HTTP通信中起着关键的作用。 Content-Type: Content-Type 是HTTP请求头或响应头的一部分,用于指示HTTP消息主体(请求或响应体)的媒体类

    2024年02月10日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包