curl
时间: 2024-06-09
一、安装
二、基础知识
命令格式
curl [options...] <url>
常用选项
short | long | params | comment |
---|---|---|---|
-A | --user-agent | <name> |
Send User-Agent <name> to server |
-d |
--data | <data> |
HTTP POST data |
-D |
<file> |
Write Header info to file |
|
-f | --fail | Fail fast with no output on HTTP errors | |
-h | --help | <category> |
Get help for commands |
-i | --include | Include protocol response headers in the output | |
-o |
--output | <file> |
Write to file instead of stdout |
-O | --remote-name | Write output to a file named as the remote file | |
-s |
--silent | Silent mode | |
-T | --upload-file | <file> |
Transfer local FILE to destination |
-u | --user | user:password | Server user and password |
-v | --verbose | Make the operation more talkative | |
-V | --version | Show version number and quit |
实例
POST请求
在发送POST请求时,对于JSON字符串,要记得用反斜杠!比如:
curl -X POST -d "{\"name\":\"tom\"}" http://cloud.bmob.cn/72e3342dbed48706/test
实测发现根本不能用
-d '{\"name\":\"tom\"}'
这种办法来简化!
下载文件
curl -o a.txt http://a.com/a.txt
常见问题
1. 在PowerShell中使用出现异常?
当我在ps(powershell)
中调用curl
并输入参数时,始终提示不对,What?
于是使用get-help
查询,结果如下:
PS C:\Users\sx00x> Get-Help curl
名称
Invoke-WebRequest
语法
Invoke-WebRequest [-Uri] <uri> [<CommonParameters>]
别名
iwr
wget
curl
原来,curl
为ps
原生命令Invoke-WebRequest
的别名。
想要调用curl
,应在ps
中输入:curl.exe
及参数,问题解决。
PS C:\Users\sx00x> curl.exe -X POST --data-urlencode a=b --data-urlencode c=d http://localhost:8080
2. 不支持compressed
windows10用户可能会遇到如下错误:
curl: option --compressed: the installed libcurl version doesn't support this
解决方法:将curl
的bin
目录路径添加到系统环境变量Path中,注意,必须将环境变量上移至第一个
。
进阶
import {
Application,
helpers,
Router,
} from "https://deno.land/x/oak@v10.4.0/mod.ts";
const app = new Application();
const router = new Router();
router
.get("/", (ctx) => {
ctx.response.body = "Home Page.";
})
// 测试URL: http://localhost/book?name=abc&id=123
.get("/book", (ctx) => {
let params = helpers.getQuery(ctx, { mergeParams: true });
console.log(params);
ctx.response.body = "name=" + params.name + " id=" + params.id;
})
// 测试URL: http://localhost/book/abc
.get("/book/:name", (ctx) => {
let params = helpers.getQuery(ctx, { mergeParams: true });
console.log(params);
ctx.response.body = "name = " + params.name;
})
// 测试: curl -X POST -d 'hello world' http://localhost/text
// 测试: curl -X POST -d '{"name":"abc","id":123}' http://localhost/text
// 同样的json数据,不同的方式解析出来结果是不一样的。一个是字符串,一个是json对象
.post("/text", async (ctx) => {
const { request } = ctx;
const res = request.body({ type: "text" });
const text = await res.value;
console.log(text);
ctx.response.body = text;
})
// 测试: curl -X POST -d '{"name":"abc","id":123}' http://localhost/json
// 测试: curl -X POST -d 'hello world' http://localhost/json # 会出错!!!
.post("/json", async (ctx) => {
const { request } = ctx;
const res = request.body({ type: "json" });
const json = await res.value;
console.log(json, json.name, json.id);
ctx.response.body = json;
})
// 测试: curl -X POST -d @data.json http://localhost/jsonFile # 如果字段较多,可以直接提交json文件
.post("/jsonFile", async (ctx) => {
const { request } = ctx;
const res = request.body({ type: "json" });
const jsonFile = await res.value;
console.log(jsonFile);
ctx.response.body = jsonFile;
});
app.use(router.routes());
app.use(router.allowedMethods());
console.log("Server listen on port 80.");
await app.listen({ port: 80 });