利用requests库post一张图片请求

最近利用python写了一个向指定网址发送请求的功能,期间也遇到了一些问题,特此写文记录。


1、问题描述
向指定网址post一个请求,请求参数包括一张图片和加密后的数据。
2、解决方案
利用requests库发送post请求,利用pyDes库进行文件的加密
3、发送请求的代码如下

import requests
.#img='img.png'
.
files={'img':('test.png',open(img,'rb'),'image/png')}
sdata={'username':username,'content':cont}
res=requests.post(url,data=sdata,files=files)
print res.text

4、分析和总结
这里主要用到了requests库中的post请求,关于这个库的详细介绍可以参考http://docs.python-requests.org/en/master/

### 如何发送带有两种不同格式参数的HTTP请求 在HTTP协议中,可以通过多种方式传递参数给服务器端处理。通常情况下,这些参数可以分为查询字符串(Query String)、表单数据(Form Data)、JSON体(Body JSON),以及文件上传等形式。如果需要在一个HTTP请求中同时携带两种不同的参数格式,则可以根据具体需求组合使用上述方法。 #### 使用GET请求 对于`GET`请求而言,所有的参数都通过URL中的查询字符串来传输。然而,由于查询字符串本质上是一个键值对列表,因此无法直接支持复杂的结构化数据或二进制文件等内容。在这种场景下,推荐仅利用简单的键值对作为参数[^1]。 #### 使用POST请求 当采用`POST`方法提交数据时,可以选择合适的内容类型(Content-Type),以便于表达多种形式的数据: - **application/x-www-form-urlencoded**: 这是最常见的形式之一,默认用于HTML `<form>`标签未指定 enctype 属性的情况。它类似于 GET 请求中的 QueryString 参数编码方式。 - **multipart/form-data**: 当涉及到文件上传或者混合文本字段与非纯文本数据(比如图片)一起发送的时候应该选用此选项。这种方式允许在同一请求里包含多个部分(part), 每一部分有自己的头部(header)描述其内容特征,并且能够容纳较大的数据量而不受 URL 长度限制的影响[^2]. 下面展示了一个例子,在这个例子中我们既包含了常规的 form data 又附加了一张图像文件: ```python import requests url = 'https://example.com/upload' files = {'file': open('image.jpg', 'rb')} data = {'key1': 'value1'} response = requests.post(url, files=files, data=data) print(response.text) ``` 此外还有另外一种常见的情形就是把一些配置性的信息放在 headers 中而实际业务逻辑所需的信息则放置到 body 的 json payload 里面去。例如设置自定义头信息的同时传送json对象如下所示: ```python headers = { 'Authorization': 'Bearer YOUR_ACCESS_TOKEN', } payload = {"username": "john_doe", "password":"supersecret"} r = requests.post("http://api.example.com/login", headers=headers, json=payload) if r.status_code == 200: print(r.json()) else: print(f"Error {r.status_code}: {r.reason}") ``` 以上代码片段展示了如何构建一个 POST 请求,其中不仅设置了特定的 Header 字段还提供了 Json 格式的 Body 数据[^3]。 综上所述,要实现同一个 HTTP 请求中携带两种不同类型参数的目标,主要取决于所使用的 HTTP 方法及其 Content-Type 设置。根据实际情况灵活运用上述介绍的各种技术手段即可达成目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值