让脚本发网络请求拿数据
两行的事
http 模块把网络请求压成了两个函数:
require "import"
import "http"
body, cookie, code, headers = http.get("你要访问的网址写在这里")
print(code) -- 状态码,200 = 成功
print(body) -- 响应内容
http.post 多一个参数——要提交的数据:
body, cookie, code, headers = http.post("目标网址", "字段=值&另一个字段=另一个值")
| 返回值 | 含义 |
|---|---|
| body | 响应正文(网页 HTML、JSON 文本等) |
| cookie | 服务端返回的会话信息,下次请求可带上 |
| code | HTTP 状态码 |
| headers | 响应头 |
四个值按序返回,不需要的直接不接。
拿到 JSON 怎么拆
接口返回的多半是 JSON,配 cjson 模块拆开:
import "cjson"
data = cjson.decode(body)
print(data["title"])
「请求 + 解析」这两步凑起来,抓天气、查词、读公告一类的小脚本就都能写了。
三个实用提醒
- 长请求会卡界面:http.get 同步执行,请求没回来脚本就停在那。任何可能超过一两秒的请求都该丢进异步任务里跑,见异步线程;
- 失败要看状态码:code 不是 200 时别急着拆 body,先看是没网、地址错还是被拒了;
- 别拿它刷请求:脚本循环里高频请求目标网站,跟用手连点没区别,对方一封 IP 全脚本失效。小工具小查询,点到为止。