BingoStack

Long way to full stack!


  • 首页

  • 标签

  • 分类

  • 归档

Linux下cURL使用教程之十三:curl vs wget

发表于 2012-09-03 | 更新于: 2020-11-03 | 分类于 curl
字数统计: 859 | 阅读时长 ≈ 3

curl和wget有很多地方是相同的,很多场景下二者都可以使用。那面对一个复杂问题的时候,我们怎么决定使用哪个工具呢?本篇通过对二者进行比较,从而对此提供思路。
本篇主要参考curl官方的文档,翻译加整理。

相同点

  • 都是可通过FTP/HTTP/HTTPS协议下载文件的命令行工具;
  • 都可以发送HTTP POST请求;
  • 都支持cookie的使用;
  • 都被设计为无界面(UI),可在如脚本中使用;
  • 都是开源且免费的软件。
阅读全文 »

Linux下cURL使用教程之十二:ftp及其他协议

发表于 2012-08-31 | 更新于: 2020-11-03 | 分类于 curl
字数统计: 571 | 阅读时长 ≈ 2

在Linux下cURL使用教程之一:cURL简介里,提到curl支持多种协议。本篇就以ftp协议为主,对curl对其他协议的操作进行简介。

基本使用

基本使用方法同HTTP没有区别:

curl ftp://ftp.cisco.com/pub/mibs/

只不过ftp一般会有用户名密码,所有在命令中要加上用户名密码:

curl -u ftpuser:ftppass -O ftp://ftp_server/index.php

或者

curl ftp:// ftpuser:ftppass ftp://ftp_server/index.php

上传文件

使用-T选项。具体请参考Linux下cURL使用教程之六:curl基本使用之HTTP文件上传。

阅读全文 »

Linux下cURL使用教程之十一:HTTPS及证书使用简介

发表于 2012-08-21 | 更新于: 2020-11-03 | 分类于 curl
字数统计: 501 | 阅读时长 ≈ 1

某些HTTPS网站对证书的要求比较严格,使用curl直接访问时会出现如下错误:

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

此时就需要使用证书。
因此本篇只对curl相关选项做出介绍,详细原理请参考HTTPS协议。

使用到的选项

-E/–cert 导入证书

-E/--cert <certificate[:password]>导入证书。curl默认使用PEM格式的证书。
一般我们从浏览器导出的cert都是X.509格式。可以使用openssl转化为PEM格式。

阅读全文 »

Linux下cURL使用教程之十:HTTP文件下载

发表于 2012-08-20 | 更新于: 2020-11-03 | 分类于 curl
字数统计: 1.6k | 阅读时长 ≈ 6

其实每次我们使用curl去打开一个url都是执行一次下载操作,因此我们甚至可以认为curl是一个下载工具。
而且curl的某些选项及特性,使得curl能完成非常强大的下载功能。
基本命令及一些有用的参数如下。

基本命令

使用curl [URL...]下载URL,并输出在终端。
可指定多个URL。多个URL时,下载内容同时在终端显示。

-#/–progress-bar 进度条

添加参数-#/--progress-bar查看下载进度条。

-o/–output 输出文件

使用参数-o/--output <file>下载并保存至文件file。
可同时下载多个URL,每个-o对应一个URL。
如:

curl -o a.html http://www.a.com http://www.b.com

会下载www.a.com的内容在a.html中,并在终端输出www.b.com的内容。而

curl -o a.html http://www.a.com -o b.html http://www.b.com

或者

curl -o a.html -o b.html http://www.a.com http://www.b.com

会分别下载两个URL至两个文件中。

阅读全文 »

HTTP认证模式

发表于 2012-08-17 | 更新于: 2020-11-03 | 分类于 curl
字数统计: 1.7k | 阅读时长 ≈ 5

前言

最近在研究curl和httpclient,用到了HTTP认证相关的知识。
但是搜索之后发现,网上居然没有很全面的HTTP认证模式的介绍,尤其是中文的文章。
因此结合MS的Understanding HTTP Authentication和HttpClient Tutorial翻译加个人理解写了一篇。

简介

本篇博文简介了几种HTTP认证模式。文章内容要求读者对HTTP请求、响应的基本结构,HTTP状态码和HTTP协议头有一定的了解。
请参考Linux下cURL使用教程之二:HTTP协议概述。

HTTP访问认证框架

HTTP协议(RFC2616)定义了一个简单的访问认证模式框架。此框架假设有若干页面(被保护资源,也称作realm,区域),只能被特定的人访问,这些人可以在服务器要求时提供凭证。
当客户端如浏览器访问一个位于保护区域(protected realm)中的页面时,服务器返回包含401未认证状态码和www认证头(WWW-Authenticate header field)的响应。返回的认证头中必须含有至少一个适用于请求页面的认证要求(challenge)。
然后客户端发起第二次请求,此次请求在请求头中包含了试用于服务器认证要求的认证头域。
如果服务器接受了客户端提供的凭证,它将返回客户端请求的页面。否则,服务端会返回另一个401未认证响应以提示客户端认证失败。
具体认证响应头和请求头的内容取决于认证的方式。RFC2616中定义了两种广泛使用的认证模式:
HTTP基本认证(HTTP Basic authentication)和HTTP摘要认证(HTTP Digest authentication)。
此外常用的还有NTLM、SPNEGO(HTTP协商认证,HTTP Negotiate authentication,是其一种)和Kerberos认证方式。

阅读全文 »

Linux下cURL使用教程之九:代理的使用

发表于 2012-08-16 | 更新于: 2020-11-03 | 分类于 curl
字数统计: 1.8k | 阅读时长 ≈ 7

这个时代估计很少有人不知道Facebook,也很少有人不知道为啥国内无法直接访问Facebook。
因此,实际应用中,我们会经常使用到代理。
本篇着重讲述在curl命令行中对代理的使用。

代理环境

本篇中,我们将代理分为HTTP代理和socks代理。
可是使用wallproxy+GAE的方式搭建个属于自己的代理,具体请百度或wallproxy官网。wallproxy设置完成后,代理默认为127.0.0.1:8086。

选项-x/–proxy

参数格式为: -x/--proxy <proxyhost[:port]>
1、使用指定的HTTP代理
如果未指定端口,默认端口为1080。比如使用我们本机wallproxy搭建的代理:

curl -x 127.0.0.1:8086 -e http://www.ip138.com/ http://iframe.ip138.com/city.asp

即可看到我们的IP变成了代理服务器的IP。

阅读全文 »

Linux下cURL使用教程之八:curl基本使用实例之115网盘自动摇一摇脚本

发表于 2012-08-15 | 更新于: 2020-11-03 | 分类于 curl
字数统计: 1.5k | 阅读时长 ≈ 6

上一篇使用shell+curl的方式完成了登陆百度空间并发表文章。但是奈何shell脚本对大批量文字的处理太弱,因此脚本显得鸡肋。
而本篇则完成一个实际可用的脚本程序:115网盘自动摇一摇脚本。

115网盘简介

115网盘容量和速度都算不错的。注册送15G,然后可通过每天摇一摇等方式获得容量。
免费会员每天可以摇一次,可以获得几十M到一百多M的空间,和几百“雨露”。雨露可用于升级,升级后增加空间,但是貌似现在没有了。
可以在淘宝上搜一下115账号的价格。
(注:当初写这个脚本的时候,还在网盘大战前后,如今的115早已不如当前,摇一摇这个功能早已消失。)

工具使用

登陆过程我们仍然使用Developer Tools分析。
简单的办法是使用谷歌官方的chrome浏览器或Firefox+Firebug。

登陆过程

登陆,使用Developer Tools抓包,很容易看到第一个POST包。

1、POST地址

https://passport.115.com/?ac=login

2、三部分数据

  • Request Headers,没特殊需要注意的字段。
  • Query String Parameters,没用。
  • Form Data,有两个数据:用户名、密码,字段名分别为login[account]、login[passwd],参数明文。
    阅读全文 »

Linux下cURL使用教程之七:curl基本使用实例之发布文章到百度空间

发表于 2012-08-12 | 更新于: 2020-11-03 | 分类于 curl
字数统计: 2.2k | 阅读时长 ≈ 10

前六篇之后,我们对curl的基本使用已经有了一定的了解。下面我们就在实际场景中使用我们的所学。
本篇实例目标为编写linux脚本,使用curl完成发布文章至百度空间。
下文将从百度空间登陆到发表文章,对每个过程的HTTP进行分析,并编写脚本实现。

工欲善其事,必先利其器

抓包分析我们使用chrome自带的Developer Tools。
实际分析过程中最好把Developer Tools的Network标签左下角的“Preserve Log upon Navigation”选中,如下图圈中处:
Chrome Developer Tools Preserve Log upon Navigation
单击变为红色即可。
此选项的作用在于当当前页面跳转到其他网页时,保存原来的日志记录。
默认不保存,比如在登陆成功一个网站后,自动跳转到其他网页,这样登陆网站过程中的记录都不保存。我们就没有办法对登陆过程进行具体分析。

POST登陆

1. 操作过程

登陆我们采用网址https://passport.baidu.com/?login,而不使用网址http://hi.baidu.com/index.htm或http://hi.baidu.com/go/login 右侧的登陆框。
这是因为后者可能因为百度空间改版等原因改变,而前者是百度账号的登陆界面,变化的几率要小。而且后者界面很多图片等元素,不利于我们抓包分析。

2. 登陆过程分析

登陆成功后找到/?login的POST包,如下图:
Developer Tools Baidu Login HTTP Analy
主要显示了状态信息、请求头部(Request Headers)、POST数据(Form Data)和响应头部(Response Heades)。
Query String Parameters是对GET的参数的解析,即网址中的?login。一般网址中“?”后面的都应该是参数,具体请参考Linux下cURL使用教程之二:HTTP协议概述中“GET命令”一节。

阅读全文 »

Linux下cURL使用教程之六:curl基本使用之HTTP文件上传

发表于 2012-08-11 | 更新于: 2020-11-03 | 分类于 curl
字数统计: 1.2k | 阅读时长 ≈ 5

有些时候,不只需要提交表单,还需要上传附件。本篇针对上传文件,对上篇curl提交表单进行补充。
注:本篇只针对HTTP上传文件部分。

PHP程序

同前,所有服务端代码通过php实现。

  • file.php,显示文件上传表单:
    <html>
    <head>
    <title>
    PHP FileUpload Demo for curl basic usage By Adeploy
    </title>
    </head>
    <body>
    This is a PHP File Upload Demo.<br />
    Select a file and Submit.<br /><br />
    <form action="upload_file.php" method="post"
    enctype="multipart/form-data">
    <label for="file">Filename:</label>
    <input type="file" name="file" id="file" />
    <br /><br />
    <input type="submit" name="submit" value="Submit" />
    </form>
    <br /><br /><br />
    <a href="http://www.adeploy.com" target="_blank">Adeploy's Blog</a>
    </body>
    </html>
阅读全文 »

Linux下cURL使用教程之五:curl基本使用之提交表单

发表于 2012-08-03 | 更新于: 2020-11-03 | 分类于 curl
字数统计: 2.3k | 阅读时长 ≈ 9

很多时候,我们想获得的内容或者想进行的操作,只有在登陆之后才有权限,此时就需要用到提交表单。
表单以HTML的形式呈现给用户,用户使用表单提交数据后,服务端获得表单数据进行处理,然后进行后续操作。比如我们登录的过程,登录的表单呈现给我们,输入用户名密码提交后,服务端获得用户名密码在数据库中查询,以查询结果判定密码正确与否。
向HTTP服务器提交数据常用的有GET和POST两种方法。下文针对这两种方法,结合实例说明curl的使用。

PHP程序

同前篇,服务端所有代码通过php实现。

  • post.php,显示表单用于POST提交数据:
    <html>
    <head>
    <title>
    PHP POST Demo for curl basic usage By Stackeye
    </title>
    </head>
    <body>
    This is a post form demo.<br /><br />
    <form action="welcome.php" method="post">
    Name: <input type="text" name="name" />
    Age: <input type="text" name="age" />
    <input type="submit" />
    </form>
    <br /><br /><br />
    <a href="http://www.stackeye.com" target="_blank">Stackeye's Blog</a>
    </body>
    </html>
阅读全文 »
1234
bingostack

bingostack

软件工程师的自我修养

34 日志
14 分类
55 标签
© 2021 bingostack | Site words total count: 62.1k
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.4