curl命令的使用-创新互联

最近公司和另外一个公司合作,该公司会定期给我们公司传送一批对我们公司有用的产品信息数据,并且要保存到数据库中,以备将来所用,当然这个任务就落在了我的身上。很快就写好了模型(用来保存产品信息的数据模型)以及接口函数,接口函数是以POST方式接收数据,写完接口函数后当然就是测试了,但是之前没测试过以post方式接收数据的api(原谅一个经验不丰富的人的无知。。。),但是还是让我找到了测试方法,不就是远程post方式提交表单嘛,网上很多例子,在此贴上我的代码,其实不难,理解了几个包的方法,这段代码还是很好理解的,如下

创新互联公司是一家集网站建设,市中企业网站建设,市中品牌网站建设,网站定制,市中网站建设报价,网络营销,网络优化,市中网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
#coding=utf-8
import sys, urllib2, urllib,json
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }
info = [
  {
    "id": 554888,
    "code": "85317",
    "partno": "xxx",
    "origin": "xxx",
    "product_name": "xxx",
    "type": "2"
  },
  {
  "id": 554113,
    "hs_code": "8230099",
    "partno": "xxx",
    "origin": "xxx",
    "product_name": "xxx",
    "type": "2"
  }
]

page = {"packetdata":info}
page = json.dumps(page)
url = 'http://0.0.0.0:7000/api_recept_json_data/'
data = urllib.urlencode(page)
req = urllib2.Request(url,data,headers)

fd = urllib2.urlopen(req,data)

print fd.read()

然后运行这段代码,发现如果数据格式没错的话接收数据成功,而且数据库中会生成相应的记录,接着就是测试修复bug,增加异常处理机制等等,尽量使它能够处理各种在传送数据过程中出现的异常。然后就去向经理汇报,演示,经理看我演示完后,然后跟我说,这个测试代码有点不专业,叫我去了解一下curl命令。然后就在网上找资料学习,发现它确实是一个功能很强大的命令,个人觉得每个web后端开发人员都应该要掌握它。

    

curl命令可以看作是命令行浏览器,作用是发出网络请求,然后得到和提交数据,显示在标准输出上面,支持多种协议。

(1)查看网页源码

   直接在curl命令后加上网址,就可以看到网页源码。我们以网址http://www.baidu.com为例,

  curl  http://www.baidu.com 

如果要把这个网页保存下来,可以使用-o参数,curl -o [文件名] URL

如果文件不存在,会自动创建的,如果想同时获取多个文件,可使用命令

curl -o [文件名1]  URL  -o [文件名2] URL

-O参数,使用URL中默认文件名保存到本地

(2) 自动跳转

有的网址是自动跳转的。使用-L参数,curl就会跳转到新的网址。

比如有些网址,只有登陆了才能访问一些页面内容,此时加上这个参数,会直接跳转到登陆页面,然后获取登陆页面的源码

(3)显示头信息

-i参数可以显示http response的头信息,连同网页代码一起。

-I参数则只显示头信息

(4)显示通信过程

-v参数可以显示一次http通信的整个过程,包括端口连接和http request头信息。

如果你觉得上面的信息还不够,那么下面的命令可以查看更详细的通信过程。

      curl --trace output.txt  URL

或者

      curl --trace-ascii output.txt  URL

运行后,请打开output.txt文件查看。

(5)发送表单信息

发送表单信息有GET和POST两种方法。GET方法相对简单,只要把数据附在网址后面就行。

      curl tvbs.cc/form.cgi?data=xxx

POST方法必须把数据和网址分开,curl就要用到--data参数。

      比如上面例子可用如下形式命令

curl --data "packetage=[{"id": 554888,"code": "85317","partno": "xxx","origin": "xxx","product_name": "xxx","type": "2"},{"id": 554113,"hs_code": "8230099","partno": "xxx","origin": "xxx","product_name": "xxx","type": "2"}]"   http://0.0.0.0:7000/api_recept_json_data/

如果你的数据没有经过表单编码,还可以让curl为你编码,参数是--data-urlencode。

如果该接口需要授权才能访问,就需要-u选项提供用户名和密码进行授权      

curl -u username:password URL

(6)文件上传

可以用curl这样上传文件:

      curl --form upload=@localfilename --form press=OK [URL]

(7)Referer字段

有时你需要在http request头信息中,提供一个referer字段,表示你是从哪里跳转过来的。

      curl --referer URL

(8)User Agent字段

这个字段是用来表示客户端的设备信息。服务器有时会根据这个字段,针对不同设备,返回不同格式的网页,比如手机版和桌面版。

比如下面的User Agent是

'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'

curl可以这样模拟:

     curl --user-agent "[User Agent]" [URL]

(9)cookie

使用--cookie参数,可以让curl发送cookie。

      curl --cookie "name=xxx"  URL

至于具体的cookie的值,可以从http response头信息的Set-Cookie字段中得到。

(10)增加头信息

有时需要在http request之中,自行增加一个头信息。--header参数就可以起到这个作用。

      curl --header "xxx: xxxxxx" URL

(11)HTTP认证

有些网域需要HTTP认证,这时curl需要用到--user/-u参数,前面提到过。

      curl --use/-ur name:password  URL

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


新闻标题:curl命令的使用-创新互联
文章网址:http://myzitong.com/article/dcgpje.html