Python requests 发送 post请求的使用方法,给出例子(发送内容到 TinyNote 的粘贴板)
代码:
# 导入requests库,用于发送HTTP请求
import requests
# 目标URL
url = "https://lzw.fukonglzw.cn:5051/submit_ztb"
try:
# 定义编程笑话,通过双关语表达程序员对Java的幽默态度
test = """
当程序员去餐馆吃饭时,服务员问道:“你要点什么?”
程序员回答:“我要一份意外和一杯咖啡。”
服务员奇怪地问:“意外和咖啡有什么关系吗?”
程序员微笑着说:“我喜欢我的代码像我喜欢我的咖啡一样 —— 有点 bug。”
"""
# 构建请求的数据,将编程笑话放入content字段
myobj = {"content": test}
# 发送POST请求
x = requests.post(url, json=myobj)
# 打印状态码和响应内容
print("状态码", x.status_code)
print("响应内容:", x.text)
except Exception as e:
# 捕获异常并打印错误信息
print("请求异常:", e)
代码运行:
root@armbian:~/tb# ls
1xh.py 2-curl.sh 3-ztb.sh 4-tqztb.py test.py weather_data.json
root@armbian:~/tb# vim 1xh.py
root@armbian:~/tb# python3 1xh.py
状态码 200
响应内容: {"content":"\n \u5f53\u7a0b\u5e8f\u5458\u53bb\u9910\u9986\u5403\u996d\u65f6\uff0c\u670d\u52a1\u5458\u95ee\u9053\uff1a\u201c\u4f60\u8981\u70b9\u4ec0\u4e48\uff1f\u201d\n \u7a0b\u5e8f\u5458\u56de\u7b54\uff1a\u201c\u6211\u8981\u4e00\u4efd\u610f\u5916\u548c\u4e00\u676f\u5496\u5561\u3002\u201d\n \u670d\u52a1\u5458\u5947\u602a\u5730\u95ee\uff1a\u201c\u610f\u5916\u548c\u5496\u5561\u6709\u4ec0\u4e48\u5173\u7cfb\u5417\uff1f\u201d\n \u7a0b\u5e8f\u5458\u5fae\u7b11\u7740\u8bf4\uff1a\u201c\u6211\u559c\u6b22\u6211\u7684\u4ee3\u7801\u50cf\u6211\u559c\u6b22\u6211\u7684\u5496\u5561\u4e00\u6837 \u2014\u2014 \u6709\u70b9 bug\u3002\u201d \n \n********************************************************************************\n"}
详细注释:
1. `import requests`: 导入Python的`requests`库,这个库用于发送HTTP请求。
2. `url = "https://lzw.fukonglzw.cn:5051/submit_ztb"`: 定义目标URL,即将POST请求发送到的服务器地址。
3. `try:`: 开始一个try块,用于捕获可能发生的异常。
4. `test = """ ... """`: 定义一个多行字符串`test`,其中包含编程相关的双关语笑话。
5. `myobj = {"content": test}`: 构建一个字典`myobj`,包含POST请求的数据。笑话被放入字典的`content`字段。
6. `x = requests.post(url, json=myobj)`: 发送POST请求,将`myobj`字典转换为JSON格式,并将其作为请求的数据。
7. `print("状态码", x.status_code)`: 打印服务器返回的HTTP状态码。
8. `print("响应内容:", x.text)`: 打印服务器返回的响应内容。
9. `except Exception as e:`: 捕获可能发生的异常,如果发生异常,执行下面的代码块。
10. `print("请求异常:", e)`: 打印异常信息,用于调试或记录错误。
curl 发送post请求 的方法,给出例子(发送内容到 TinyNote 的粘贴板)
代码:
#!/bin/bash
curl -X POST -H "Content-Type: application/json" -d '{"content": "这是一个笑话:Python走进了一家酒吧,酒吧里的人都说:Hello World!"}' https://lzw.fukonglzw.cn:5051/submit_diary
代码运行:
root@armbian:~/tb# ls
1xh.py 2-curl.sh 3-ztb.sh 4-tqztb.py test.py weather_data.json
root@armbian:~/tb# ./2-curl.sh
{"content":"\u8fd9\u662f\u4e00\u4e2a\u7b11\u8bdd\uff1aPython\u8d70\u8fdb\u4e86\u4e00\u5bb6\u9152\u5427\uff0c\u9152\u5427\u91cc\u7684\u4eba\u90fd\u8bf4\uff1aHello World\uff01\n********************************************************************************\n"}
root@armbian:~/tb#
详细注释:
#!/bin/bash
: 这是指定了脚本运行时要使用的解释器,这里是 Bash。
#!/bin/bash
curl -X POST \
-H "Content-Type: application/json" \
-d '{"content": "这是一个笑话:Python走进了一家酒吧,酒吧里的人都说:Hello World!"}' \
https://lzw.fukonglzw.cn:5051/submit_diary
-
curl
: 是一个命令行工具,用于进行 URL 数据传输。 -
-X POST
: 指定 HTTP 请求的方法为 POST,表示要向服务器提交数据。 -
-H "Content-Type: application/json"
: 指定了一个 HTTP 头部,它告诉服务器请求的主体内容(body)是 JSON 格式。Content-Type
是标准的 HTTP 头部字段,用于说明请求或响应中包含的数据类型。在这里,application/json
表示请求的主体是 JSON 格式的数据。 -
-d '{"content": "这是一个笑话:Python走进了一家酒吧,酒吧里的人都说:Hello World!"}'
: 指定了要发送给服务器的数据。这里使用了-d
选项,后接的是一个包含笑话内容的 JSON 字符串。这个字符串被发送给服务器作为请求的主体内容。 -
https://lzw.fukonglzw.cn:5051/submit_diary
: 指定了目标 URL,这是服务器上一个接收笑话的 API 端点。
参考青龙面板的curl 请求,使用 Python 的 requests 包 获取天气数据,将获取的天气数据发送到 TinyNote 的粘贴板
代码:
# 导入 requests 库用于发送 HTTP 请求
import requests
# 导入 pprint 用于格式化输出 JSON 数据
from pprint import pprint
# 设置城市和和风天气的 API Key
city = '深圳·南山' # 改成自己需要设置的城市
city_code = "101280601" # 改成自己需要查询的和风天气的城市代码
hefeng_key = '6894024ab3db4e059ced71bda2bd5737' # 改成自己的和风天气的 key
try:
# 发送 HTTP 请求并将 JSON 响应存储到变量中
response = requests.get(f"https://devapi.qweather.com/v7/weather/3d?location={city_code}&key={hefeng_key}")
# 打印 HTTP 响应对象,用于调试
print("response: ", response)
# 如果请求失败,抛出异常
response.raise_for_status()
# 解析 JSON 数据
weather_data = response.json()
# 使用 pprint 格式化输出 JSON 数据,用于调试
pprint(weather_data)
# 提取所需的信息
temp_max = weather_data['daily'][0]['tempMax']
temp_min = weather_data['daily'][0]['tempMin']
text_day = weather_data['daily'][0]['textDay']
text_night = weather_data['daily'][0]['textNight']
wind_direction_day = weather_data['daily'][0]['windDirDay']
wind_speed_day = weather_data['daily'][0]['windSpeedDay']
uv_index = weather_data['daily'][0]['uvIndex']
sunrise = weather_data['daily'][0]['sunrise']
sunset = weather_data['daily'][0]['sunset']
moonrise = weather_data['daily'][0]['moonrise']
moonset = weather_data['daily'][0]['moonset']
moon_phase = weather_data['daily'][0]['moonPhase']
humidity = weather_data['daily'][0]['humidity']
precip = weather_data['daily'][0]['precip']
pressure = weather_data['daily'][0]['pressure']
visibility = weather_data['daily'][0]['vis']
cloud_cover = weather_data['daily'][0]['cloud']
# 构建天气信息字符串
weather_info = f"""
城市: {city}
最高温度: {temp_max}℃
最低温度: {temp_min}℃
白天天气: {text_day}
夜间天气: {text_night}
白天风向: {wind_direction_day}
白天风速: {wind_speed_day} m/s
UV指数: {uv_index}
日出时间: {sunrise}
日落时间: {sunset}
月升时间: {moonrise}
月落时间: {moonset}
月相: {moon_phase}
湿度: {humidity}%
降水量: {precip}mm
气压: {pressure}hPa
能见度: {visibility}km
云量: {cloud_cover}%
"""
# 发送天气信息到指定的 URL
url = "https://lzw.fukonglzw.cn:5051/submit_ztb"
myobj = {"content": weather_info}
response = requests.post(url, json=myobj)
# 处理响应
print("状态码:", response.status_code)
print("响应内容:", response.text)
except Exception as e:
# 捕获异常并打印错误信息
print("发生异常:", e)
代码运行:
root@armbian:~/tb# python3 4-tqztb.py
详细注释:
这段 Python 代码的作用是通过和风天气的 API 获取某城市的天气信息,然后将获取的天气信息以 JSON 格式发送到指定的 URL。以下是详细解释:
# 导入 requests 库用于发送 HTTP 请求
import requests
# 导入 pprint 用于格式化输出 JSON 数据
from pprint import pprint
# 设置城市和和风天气的 API Key
city = '深圳·南山' # 改成自己需要设置的城市
city_code = "101280601" # 改成自己需要查询的和风天气的城市代码
hefeng_key = '6894024ab3db4e059ced71bda2bd5737' # 改成自己的和风天气的 key
try:
# 发送 HTTP 请求并将 JSON 响应存储到变量中
response = requests.get(f"https://devapi.qweather.com/v7/weather/3d?location={city_code}&key={hefeng_key}")
# 打印 HTTP 响应对象,用于调试
print("response: ", response)
# 如果请求失败,抛出异常
response.raise_for_status()
# 解析 JSON 数据
weather_data = response.json()
# 使用 pprint 格式化输出 JSON 数据,用于调试
pprint(weather_data)
# 提取所需的信息
temp_max = weather_data['daily'][0]['tempMax']
temp_min = weather_data['daily'][0]['tempMin']
text_day = weather_data['daily'][0]['textDay']
text_night = weather_data['daily'][0]['textNight']
wind_direction_day = weather_data['daily'][0]['windDirDay']
wind_speed_day = weather_data['daily'][0]['windSpeedDay']
uv_index = weather_data['daily'][0]['uvIndex']
sunrise = weather_data['daily'][0]['sunrise']
sunset = weather_data['daily'][0]['sunset']
moonrise = weather_data['daily'][0]['moonrise']
moonset = weather_data['daily'][0]['moonset']
moon_phase = weather_data['daily'][0]['moonPhase']
humidity = weather_data['daily'][0]['humidity']
precip = weather_data['daily'][0]['precip']
pressure = weather_data['daily'][0]['pressure']
visibility = weather_data['daily'][0]['vis']
cloud_cover = weather_data['daily'][0]['cloud']
# 构建天气信息字符串
weather_info = f"""
城市: {city}
最高温度: {temp_max}℃
最低温度: {temp_min}℃
白天天气: {text_day}
夜间天气: {text_night}
白天风向: {wind_direction_day}
白天风速: {wind_speed_day} m/s
UV指数: {uv_index}
日出时间: {sunrise}
日落时间: {sunset}
月升时间: {moonrise}
月落时间: {moonset}
月相: {moon_phase}
湿度: {humidity}%
降水量: {precip}mm
气压: {pressure}hPa
能见度: {visibility}km
云量: {cloud_cover}%
"""
# 发送天气信息到指定的 URL
url = "https://lzw.fukonglzw.cn:5051/submit_ztb"
myobj = {"content": weather_info}
response = requests.post(url, json=myobj)
# 处理响应
print("状态码:", response.status_code)
print("响应内容:", response.text)
except Exception as e:
# 捕获异常并打印错误信息
print("发生异常:", e)
详细解释:
这段代码是一个简单的天气查询和信息发送的脚本,主要使用了和风天气的API来获取天气信息,并将获取的信息通过HTTP POST请求发送到指定的URL。以下是对代码的详细解释:
- 导入模块:
import requests
from pprint import pprint
requests
是一个用于发送 HTTP 请求的第三方库。pprint
是 Python 标准库中的一个模块,用于以更美观的方式打印数据,特别是对于 JSON 数据。
- 设置城市和和风天气的 API Key:
city = '深圳·南山'
city_code = "101280601"
hefeng_key = '6894024ab3db4e059ced71bda2bd5737'
city
是要查询的城市名称。city_code
是和风天气中对应城市的代码。hefeng_key
是和风天气的 API Key,用于进行身份验证。
- 发送 HTTP 请求获取天气信息:
response = requests.get(f"https://devapi.qweather.com/v7/weather/3d?location={city_code}&key={hefeng_key}")
- 使用
requests.get
发送 GET 请求,获取和风天气的3天天气信息。 {city_code}
和{hefeng_key}
是通过字符串格式化的方式将城市代码和 API Key 添加到请求的URL中。
- 打印 HTTP 响应对象:
print("response: ", response)
- 用于调试,打印 HTTP 响应对象,查看请求的状态等信息。
- 处理请求结果:
response.raise_for_status()
weather_data = response.json()
response.raise_for_status()
用于检查请求是否成功,如果不成功会抛出异常。response.json()
将响应的 JSON 数据解析为 Python 字典。
- 提取所需的天气信息:
# 从 JSON 数据中提取天气信息
temp_max = weather_data['daily'][0]['tempMax']
temp_min = weather_data['daily'][0]['tempMin']
# ...(省略其他信息提取)
- 通过访问 JSON 数据的键值来提取所需的天气信息。
- 构建天气信息字符串:
weather_info = f"""
城市: {city}
最高温度: {temp_max}℃
最低温度: {temp_min}℃
白天天气: {text_day}
...
云量: {cloud_cover}%
"""
- 使用格式化字符串构建包含天气信息的字符串。
- 发送天气信息到指定的 URL:
url = "https://lzw.fukonglzw.cn:5051/submit_ztb"
myobj = {"content": weather_info}
response = requests.post(url, json=myobj)
- 使用
requests.post
发送 POST 请求,将天气信息作为 JSON 数据发送到指定的 URL。
- 处理响应:
print("状态码:", response.status_code)
print("响应内容:", response.text)
- 打印请求的状态码和响应内容,用于调试和确认请求是否成功。
- 异常处理:
except Exception as e:
print("发生异常:", e)
- 捕获可能发生的异常,并打印错误信息。
总体来说,这个脚本的功能是通过和风天气API获取指定城市的3天天气信息,然后将提取的信息格式化成字符串,通过 HTTP POST 请求发送到指定的 URL。