curl工具的入门级使用-程序员宅基地

技术标签: python  编程实践  http  网络协议  

1 cURL简介

cURL是常用的命令行工具, 它的名字就是客户端(client)的 URL 工具的意思。1997年首次发行。它支持文件上传和下载, 是综合传输工具 。

1.1 cURL是什么

cURL是一个利用URL语法在命令行方式下工作的开源文件传输工具,也是一个跨平台的库(libcurl), cURL编程用于需要通过Internet协议发送或接收数据的几乎任何地方。

cURL支持几乎所有的互联网协议(DICT,FILE,FTP,FTPS,GOPHER,HTTP,HTTPS,IMAP,IMAPS,LDAP,LDAPS,MQTT,POP3,POP3S,RTMP,RTMPS,RTSP,SCP,SFTP,SMB,SMBS,SMTP ,SMTPS,TELNET和TFTP)。

1.2 cURL能做什么

cURL可以用于发送各种类型的请求,如GET、POST、PUT、DELETE等,还可以设置请求头、上传文件或数据、进行身份验证等。通过cURL,用户可以从服务器获取数据、上传文件、测试网络服务、处理API请求等。

此外,cURL还支持各种选项和参数,如代理支持、文件断点续传、带宽限制、SSL连接等。这些功能使得cURL成为一个灵活和强大的工具,广泛应用于网络开发和系统管理中。

1.3 在Windows下安装使用cURL

下载
下载cURL安装包:可以从cURL官网(https://curl.se/download.html) 下载Windows版本的cURL安装包。根据个人电脑系统位数(32位或64位)选择相应的安装包进行下载。在个人电脑中,curl已经是内置工具了,无需下载安装
在这里插入图片描述

配置
解压完成后,现在还只能先进入curl.exe所在目录运行。为了能在任何目录运行curl,就必须设置环境变量,方法如下:

  • 在系统环境变量中添加CURL_HOME变量,设置值为curl的安装根目录,如C:\Users\Administrator\Downloads\curl-8.6.0(根据自己情况修改)。
  • 在Path变量的末尾添加目录%CURL_HOME%\AMD64(这里是 64 位),注意不要改动 Path 变量的原有部分。
  • 点击确定,保存退出。

测试
在任意位置打开CMD,输入命令curl --help回车,如果出现curl help信息,说明Curl能够运行,否则请再仔细检查。

注意:环境变量仅在打开 CMD 时加载,如果CMD处于打开状态,必须关闭重新打开后才能生效。检查CURL_HOME环境变量是否生效的办法:在CMD中输入echo %CURL_HOME%回车,如果生效会输出变量的值。

2 cURL在http api中的使用

常见参数:
-A/--user-agent <string>              设置用户代理发送给服务器
-b/--cookie <name=string/file>    cookie字符串或文件读取位置
-c/--cookie-jar <file>                    操作结束后把cookie写入到这个文件中
-C/--continue-at <offset>            断点续转
-D/--dump-header <file>              把header信息写入到该文件中
-d/--data <data>                     HTTP  POST方式传送数据  
--data-ascii <data>               以ascii的方式post数据  
--data-binary <data>              以二进制的方式post数据
-e/--referer                                  来源网址
-f/--fail                                          连接失败时不显示http错误
-g/--globoff                          禁用网址序列和范围使用{
    }[]  
-G/--get                          以get的方式来发送数据  
-h/--help                              帮助  
-H/--header <line>                      自定义头信息传递给服务器  
--ignore-content-length                   忽略的HTTP头信息的长度  
-o/--output                                  把输出写到该文件中
-O/--remote-name                      把输出写到该文件中,保留远程文件的文件名
-r/--range <range>                      检索来自HTTP/1.1或FTP服务器字节范围
-s/--silent                                    静音模式。不输出任何东西
-T/--upload-file <file>                  上传文件
-u/--user <user[:password]>      设置服务器的用户和密码
-w/--write-out [format]                什么输出完成后
-x/--proxy <host[:port]>              在给定的端口上使用HTTP代理
-#/--progress-bar                        进度条显示当前的传送状态

更多参数可参考:https://www.cnblogs.com/zhuzhenwei918/p/6781314.html

下列curl命令使用案例对应用相关的python flask服务器实现,更多使用案例可以参考https://www.cnblogs.com/7qin/p/14100585.html

2.1 基本使用

使用curl获取http网页数据

from flask import Flask, render_template, request
from flask import jsonify, session, make_response, request,send_file
from werkzeug.utils import secure_filename
 
import os
 
app = Flask(__name__)
 
@app.route('/')
@app.route('/index')
@app.route('/index.html')
def index():
    return request.host+"<br/>"+ request.url+"   <br/>hello world"
 
if __name__ == '__main__':
    #host=0.0.0.0 表示支持该服务器的所有ip地址
    #port指端口
    #debug=True指输出调试信息
   app.run(host="0.0.0.0",debug=True,port=14000)

curl 获取效果
在这里插入图片描述
浏览器打开效果
在这里插入图片描述

2.2 下载文件

使用cURL命令下载文件。基本的cURL命令格式如下:

curl -O [URL]

其中,-O选项表示将文件保存到本地,[URL]是要下载文件的链接地址。例如,要下载一个名为example.zip的文件,可以使用以下命令:将从指定的URL下载文件,并将其保存在当前目录下,文件名保持不变。

curl -O  http://www.example.com/example.zip

不会显示下载进度信息其中 -s/–silent 静音模式。不输出任何东西

curl -s -O  http://www.example.com/example.zip

命令使用效果如下所示,其还可以通过-o 参数指定下载后保存的文件名
在这里插入图片描述

2.3 上传 文件

要使用cURL上传文件到网站,可以使用POST请求和-F选项指定文件路径和参数名称。下面是一个示例命令:
curl -X POST -F "file=@/path/to/file" [URL]
其中,-X POST指定请求方法为POST,-F "file=@/path/to/file"指定上传的文件路径和参数名称,[URL]是目标URL。

如果需要设置请求头或添加其他参数,可以使用-H或–header选项和-d或–data选项。例如:

curl -X POST -F "file=@/path/to/file" -H "Content-Type: multipart/form-data" [URL]
这将设置请求头为Content-Type: multipart/form-data,告诉服务器接收的数据是二进制格式。

请注意,服务器需要能够处理文件上传的请求。在服务器端,需要有一个处理文件上传的程序或脚本,以便接收并处理上传的文件。具体的实现方式取决于你使用的服务器端编程语言和框架。

例如命令:curl -X POST -F "[email protected]" http://127.0.0.1:14000/uploader,在进行文件上传时有相对应的服务器代码。这里需要注意的是-F,表示的是from |表格,参数中带@表示文件上传
在这里插入图片描述
上传文件并提交post参数
上传文件并提交post参数,命令格式如下所示,第一个-F参数中的value带@,表示上传文件,第二次参数则是form表单参数(也就是post参数)。
curl -X POST -F "[email protected]" -F level=1 http://127.0.0.1:14000/uploader
对应的后台代码如下所示:

@app.route('/uploader',methods=['GET','POST'])
def uploader():
    if request.method == 'POST':
        f = request.files['file']#跟表单里file中的name要一样
        if len(f.filename)<2:
            return "请上传正确的文件!,当前文件名:"+f.filename
        savename=os.path.join(app.config['UPLOAD_FOLDER'], secure_filename(f.filename))
        f.save(savename)

        level=request.values.get('level')
        level=int(level)
        return name

命令执行效果如下所示:
在这里插入图片描述

curl不仅仅可以上传文件到http网站,还可以上传文件到ftp服务器。通过内置option:-T来实现

curl -T dodo1.JPG -u 用户名:密码 ftp://www.linux.com/img/

2.4 post请求

post提交键值对数据数据
在以下命令中,key1与key2为post参数,可以根据自己情况修改,value1和value2是对应key的值

curl -X POST -d key1=value1 -d key2=value2 [URL]

对于multipart/form-data类型的POST请求,这里需要注意的是-F,表示的是from |表格

curl -X POST -F key1=value1 -F key2=value2 [URL]

例如使用以下命令提交post参数
curl -X POST -d key1=value1 -d key2=value2 http://127.0.0.1:14000/post_test
具体执行效果与对应后端代码如下所示
在这里插入图片描述

post提交json数据
这种方法是参数直接在header里面的,如需将输出指定到文件可以通过重定向进行操作. curl -H “Content-Type:application/json” -X POST -d ‘json data’ URL
-H/–header 自定义头信息传递给服务器
-x/–proxy <host[:port]> 在给定的端口上使用HTTP代理

curl -H "Content-Type:application/json" -X POST -d '{"user": "admin", "passwd":"12345678"}' http://127.0.0.1:8000/login

2.5 get请求

get请求是将参数以?的形式连接在原有的url上,其使用&作为连接多个参数的符号

curl "[URL]"

例如以下命令,对于url地址http://127.0.0.1:14000/post_test,使用?连接所有的请求参数,然后key1与key2之间使用&符号连接。需要注意的是,在curl中&符号有其他的含义,故而需要将url用""标注一下。

curl "http://127.0.0.1:14000/post_test?key1=value2&key2=value2"

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_74259636/article/details/135953963

智能推荐

JWT(Json Web Token)实现无状态登录_无状态token登录-程序员宅基地

文章浏览阅读685次。1.1.什么是有状态?有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session。例如登录:用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户的信息。缺点是什么?服务端保存大量数据,增加服务端压力 服务端保存用户状态,无法进行水平扩展 客户端请求依赖服务.._无状态token登录

SDUT OJ逆置正整数-程序员宅基地

文章浏览阅读293次。SDUT OnlineJudge#include<iostream>using namespace std;int main(){int a,b,c,d;cin>>a;b=a%10;c=a/10%10;d=a/100%10;int key[3];key[0]=b;key[1]=c;key[2]=d;for(int i = 0;i<3;i++){ if(key[i]!=0) { cout<<key[i.

年终奖盲区_年终奖盲区表-程序员宅基地

文章浏览阅读2.2k次。年终奖采用的平均每月的收入来评定缴税级数的,速算扣除数也按照月份计算出来,但是最终减去的也是一个月的速算扣除数。为什么这么做呢,这样的收的税更多啊,年终也是一个月的收入,凭什么减去12*速算扣除数了?这个霸道(不要脸)的说法,我们只能合理避免的这些跨级的区域了,那具体是那些区域呢?可以参考下面的表格:年终奖一列标红的一对便是盲区的上下线,发放年终奖的数额一定一定要避免这个区域,不然公司多花了钱..._年终奖盲区表

matlab 提取struct结构体中某个字段所有变量的值_matlab读取struct类型数据中的值-程序员宅基地

文章浏览阅读7.5k次,点赞5次,收藏19次。matlab结构体struct字段变量值提取_matlab读取struct类型数据中的值

Android fragment的用法_android reader fragment-程序员宅基地

文章浏览阅读4.8k次。1,什么情况下使用fragment通常用来作为一个activity的用户界面的一部分例如, 一个新闻应用可以在屏幕左侧使用一个fragment来展示一个文章的列表,然后在屏幕右侧使用另一个fragment来展示一篇文章 – 2个fragment并排显示在相同的一个activity中,并且每一个fragment拥有它自己的一套生命周期回调方法,并且处理它们自己的用户输_android reader fragment

FFT of waveIn audio signals-程序员宅基地

文章浏览阅读2.8k次。FFT of waveIn audio signalsBy Aqiruse An article on using the Fast Fourier Transform on audio signals. IntroductionThe Fast Fourier Transform (FFT) allows users to view the spectrum content of _fft of wavein audio signals

随便推点

Awesome Mac:收集的非常全面好用的Mac应用程序、软件以及工具_awesomemac-程序员宅基地

文章浏览阅读5.9k次。https://jaywcjlove.github.io/awesome-mac/ 这个仓库主要是收集非常好用的Mac应用程序、软件以及工具,主要面向开发者和设计师。有这个想法是因为我最近发了一篇较为火爆的涨粉儿微信公众号文章《工具武装的前端开发工程师》,于是建了这么一个仓库,持续更新作为补充,搜集更多好用的软件工具。请Star、Pull Request或者使劲搓它 issu_awesomemac

java前端技术---jquery基础详解_简介java中jquery技术-程序员宅基地

文章浏览阅读616次。一.jquery简介 jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互 jQuery 的功能概括1、html 的元素选取2、html的元素操作3、html dom遍历和修改4、js特效和动画效果5、css操作6、html事件操作7、ajax_简介java中jquery技术

Ant Design Table换滚动条的样式_ant design ::-webkit-scrollbar-corner-程序员宅基地

文章浏览阅读1.6w次,点赞5次,收藏19次。我修改的是表格的固定列滚动而产生的滚动条引用Table的组件的css文件中加入下面的样式:.ant-table-body{ &amp;amp;::-webkit-scrollbar { height: 5px; } &amp;amp;::-webkit-scrollbar-thumb { border-radius: 5px; -webkit-box..._ant design ::-webkit-scrollbar-corner

javaWeb毕设分享 健身俱乐部会员管理系统【源码+论文】-程序员宅基地

文章浏览阅读269次。基于JSP的健身俱乐部会员管理系统项目分享:见文末!

论文开题报告怎么写?_开题报告研究难点-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏15次。同学们,是不是又到了一年一度写开题报告的时候呀?是不是还在为不知道论文的开题报告怎么写而苦恼?Take it easy!我带着倾尽我所有开题报告写作经验总结出来的最强保姆级开题报告解说来啦,一定让你脱胎换骨,顺利拿下开题报告这个高塔,你确定还不赶快点赞收藏学起来吗?_开题报告研究难点

原生JS 与 VUE获取父级、子级、兄弟节点的方法 及一些DOM对象的获取_获取子节点的路径 vue-程序员宅基地

文章浏览阅读6k次,点赞4次,收藏17次。原生先获取对象var a = document.getElementById("dom");vue先添加ref <div class="" ref="divBox">获取对象let a = this.$refs.divBox获取父、子、兄弟节点方法var b = a.childNodes; 获取a的全部子节点 var c = a.parentNode; 获取a的父节点var d = a.nextSbiling; 获取a的下一个兄弟节点 var e = a.previ_获取子节点的路径 vue