开发网站,少不了测试。现在的网站为了加强安全性,都启用了HTTPS协议。所谓HTTPS,也就是HTTP文本在SSL协议中传输。用curl命令行来测试HTTPS站点是个很有用的功能,写点脚本,就可以做功能测试。

假定Ubuntu系统运行着一个HTTPS站点,用CppCMS编写,Nginx配置了SSL证书,通过FastCGI和CppCMS编写的后台进程连接在一起。

第一步,安装:

  1. apt-get install curl

我的Ubuntu是13.04, 因此安装的curl版本很新,下面的命令检查版本号和其他信息:

  1. curl -V
  2. curl 7.29.0 (x86_64-pc-linux-gnu) libcurl/7.29.0 OpenSSL/1.0.1c zlib/1.2.7 libidn/1.25 librtmp/2.3
  3. Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smtp smtps telnet tftp
  4. Features: GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP

我们可以看到启用了SSL, 并且openssl版本是1.0.1c。

第二步,访问HTTP站点:

  1. curl http://www.baidu.com
  2. <!DOCTYPE html><!--STATUS OK--><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"><title>百度一下,你就知道<unction(){var _t=new Date().getTime();document.cookie = "WWW_ST=" + _t +";expires=" + new Date(_t + 10000).toGMTString()})}catch(e){}</script></html><!--b5d54ba904675fbf-->

返回了百度的网页内容。内容太多,裁剪了。

第三步,查看详细信息,用-v参数。

  1. curl -v http://www.baidu.com
  2. * About to connect() to www.baidu.com port 80 (#0)
  3. *   Trying 61.135.169.125...
  4. * Connected to www.baidu.com (61.135.169.125) port 80 (#0)
  5. > GET / HTTP/1.1
  6. > User-Agent: curl/7.29.0
  7. > Host: www.baidu.com
  8. > Accept: */*
  9. >
  10. < HTTP/1.1 200 OK
  11. < Date: Wed, 03 Jul 2013 13:55:45 GMT
  12. < Server: BWS/1.0
  13. < Content-Length: 10437
  14. < Content-Type: text/html;charset=utf-8
  15. < Cache-Control: private
  16. < Set-Cookie: BDSVRTM=24; path=/
  17. < Set-Cookie: H_PS_PSSID=2757_1457_2704_2726_1788_2249_2702; path=/; domain=.baidu.com
  18. < Set-Cookie: BAIDUID=5E81F8E70C5DE6EDB5C24088E3E56359:FG=1; expires=Wed, 03-Jul-43 13:55:45 GMT; path=/; domain=.baidu.com
  19. < Expires: Wed, 03 Jul 2013 13:55:45 GMT
  20. < P3P: CP=" OTI DSP COR IVA OUR IND COM "
  21. < Connection: Keep-Alive
  22. <
  23. <!DOCTYPE html><!--STATUS OK--><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"><title>百度一下,你就知道</title><style >html,body{height:100%}html{overflow-y:auto}#wrapper{position:relative;_position:;min-height:100%}#content{padding-bottom:100px;text-align:center}#ftCon{height:100px;position:absolute;bottom:44px;text-align:center;width:100%;margin:0 auto;z-index:0;overflow:hidden}#ftConw{width:720px;margin:0 auto}body{font:12px arial;text-align:;background:#fff}body,p,form,ul,li{margin:0;padding:0;list-style:none}body,form,#fm{position:relative}td{text-align:left}img{border:0}a{color:#00c}a:active{color:#f60}#u{color:#999;padding:4px 10px 5px 0;text-align:right}#u a{margin:0 5px}#u .reg{margin:0}#m{width:720px;margin:0 auto}#nv a,#nv b,.btn,#lk{font-size:14px}#fm{padding-left:110px;text-align:left;z-index:1}input{border:0;padding:0}#nv{height:19px;font-size:16px;margin:0 0 4px;text-alig

这样详细的信息都显示出来了。-v参数很有用,一般调试时都打开。

如果只想查看头部信息,用-i代替-v.

第四步,访问本地HTTPS站点

  1. curl --insecure https://localhost/your_site/login_page
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8">
  6. <meta http-equiv="pragma" content="no-cache">
  7. <meta http-equiv="cache-control" content="no-cache">

---insecure表示忽略校验步骤。

我试过用--cacert选项指定server.crt文件,也就是我的nginx使用的那个文件。但是报错。所以直接忽略算了。

第五步,调用HTTPS的login API登录

  1. curl -v --insecure -d "email=gche@yousite.com&pwd=123456&language=en" https://localhost/your_site/login
  2. * About to connect() to localhost port 443 (#0)
  3. *   Trying 127.0.0.1...
  4. * Connected to localhost (127.0.0.1) port 443 (#0)
  5. * successfully set certificate verify locations:
  6. *   CAfile: none
  7. CApath: /etc/ssl/certs
  8. * SSLv3, TLS handshake, Client hello (1):
  9. * SSLv3, TLS handshake, Server hello (2):
  10. * SSLv3, TLS handshake, CERT (11):
  11. * SSLv3, TLS handshake, Server key exchange (12):
  12. * SSLv3, TLS handshake, Server finished (14):
  13. * SSLv3, TLS handshake, Client key exchange (16):
  14. * SSLv3, TLS change cipher, Client hello (1):
  15. * SSLv3, TLS handshake, Finished (20):
  16. * SSLv3, TLS change cipher, Client hello (1):
  17. * SSLv3, TLS handshake, Finished (20):
  18. * SSL connection using ECDHE-RSA-AES256-SHA
  19. * Server certificate:
  20. *    subject: C=AU; ST=Some-State; O=Internet Widgits Pty Ltd
  21. *    start date: 2013-06-02 07:24:53 GMT
  22. *    expire date: 2014-06-02 07:24:53 GMT
  23. *    issuer: C=AU; ST=Some-State; O=Internet Widgits Pty Ltd
  24. *    SSL certificate verify result: self signed certificate (18), continuing anyway.
  25. > POST /your_site/login HTTP/1.1
  26. > User-Agent: curl/7.29.0
  27. > Host: localhost
  28. > Accept: */*
  29. > Content-Length: 51
  30. > Content-Type: application/x-www-form-urlencoded
  31. >
  32. * upload completely sent off: 51 out of 51 bytes
  33. < HTTP/1.1 200 OK
  34. < Server: nginx/1.5.1
  35. < Date: Wed, 03 Jul 2013 14:02:38 GMT
  36. < Content-Type: text/html; charset=utf-8
  37. < Transfer-Encoding: chunked
  38. < Connection: keep-alive
  39. < X-Powered-By: CppCMS/1.0.3
  40. < Set-Cookie: cml_session=518b7fc5117e87bce28f2444; Max-Age=36000; Path=/; Version=1
  41. <
  42. * Connection #0 to host localhost left intact
  43. {"message":"Login succeeded!","status":0,"value":""}

-d "...&..." 的参数是通过POST方法发送参数。服务端最终回复一个JSON格式的字符串,表示登录成功。并且拿到了cml_session的值,也就是cookie.

第六步,用cookie访问HTTP网页。后面的网页只需要HTTP访问,提供正确的cookie即可。

  1. curl -v --cookie "cml_session=518b7fc5117e87bce28f2444" http://localhost/your_site/home
  2. * About to connect() to localhost port 80 (#0)
  3. *   Trying 127.0.0.1...
  4. * Connected to localhost (127.0.0.1) port 80 (#0)
  5. > GET /your_site/home HTTP/1.1
  6. > User-Agent: curl/7.29.0
  7. > Host: localhost
  8. > Accept: */*
  9. > Cookie: cml_session=518b7fc5117e87bce28f2444
  10. >
  11. < HTTP/1.1 200 OK
  12. < Server: nginx/1.5.1
  13. < Date: Wed, 03 Jul 2013 14:06:43 GMT
  14. < Content-Type: text/html; charset=utf-8
  15. < Transfer-Encoding: chunked
  16. < Connection: keep-alive
  17. < X-Powered-By: CppCMS/1.0.3
  18. <
  19. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  20. <html xmlns="http://www.w3.org/1999/xhtml">
  21. <head>
  22. <meta http-equiv="content-type" content="text/html; charset=utf-8">
  23. <meta http-equiv="pragma" content="no-cache">
  24. <meta http-equiv="cache-control" content="no-cache">
  25. <meta http-equiv="expires" content="0">
  26. <title>CML Cloud</title>
  27. <link type="text/css" href="../style/reset.css" rel="stylesheet"/>
  28. <link type="text/css" href="../style/style.css" rel="stylesheet"/>

http://blog.csdn.net/csfreebird/article/details/9237925

用curl访问HTTPS站点并登录(对HTTP返回的结果特别清楚)的更多相关文章

  1. 用curl访问HTTPS站点并登录

    开发网站,少不了测试.现在的网站为了加强安全性,都启用了HTTPS协议.所谓HTTPS,也就是HTTP文本在SSL协议中传输.用curl命令行来测试HTTPS站点是个很有用的功能,写点脚本,就可以做功 ...

  2. php curl 访问 https站点

    $uri = "https://your_website"; $ch = curl_init (); $data=I('post.'); curl_setopt ( $ch, CU ...

  3. curl+个人证书(又叫客户端证书)访问https站点

    摘自http://blog.csdn.net/chary8088/article/details/22990741 curl+个人证书(又叫客户端证书)访问https站点 目前,大公司的OA管理系统( ...

  4. ACME[free https] Linux中使用curl命令访问https站点4种常见错误和解决方法

    free https certification generator https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E 每一种客户 ...

  5. centos7内核升级及curl访问https证书过期处理

    centos7内核升级及curl访问https证书过期处理 先看下当前系统的linux内核版本 uname -r 3.10.0-229.el7.x86_64 升级步骤 1.rpm --import h ...

  6. C#检测并安装https站点的数字证书,CefSharp和HttpWebRequest通过会话Cookie实现自动登录访问https站点

    HttpUtil工具类: using System; using System.Collections.Generic; using System.IO; using System.Linq; usi ...

  7. requests访问https站点证书告警问题

    背景 想使用api的方式去访问公司内部azkaban平台,https站点,azkaban的官方api文档使用的curl语句,如下: curl -k -X POST --data "actio ...

  8. iOS 安全:UIWebView访问Https站点防止中间人攻击

    尽管Https协议能够提供数据的加密.身份的认证等安全服务,但并不是没有漏洞.HTTPS协议安全隐患的存在可能使用户受到各种极具破坏力的网络攻击.其中中间人攻击(Man In The Middle, ...

  9. [PHP] curl访问https与CA证书问题

    CA证书,用来在调用HTTPS资源的时候,验证对方网站是否是CA颁布的证书,而不是自己随便生成的 curl命令1.需要下载CA证书 文件地址是 http://curl.haxx.se/ca/cacer ...

随机推荐

  1. Apache+tomcat的整合 分类: C_OHTERS 2014-05-07 15:08 293人阅读 评论(0) 收藏

    http://blog.csdn.net/stefyue/article/details/6918542 为什么要做这个整合呢?当然,首先想到是就是Apache和Tomcat的区别.正因为有区别,有各 ...

  2. php实现表示数值的字符串(is_numeric($s))

    php实现表示数值的字符串(is_numeric($s)) 一.总结 is_numeric($s) 二.php实现表示数值的字符串 题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数) ...

  3. [tmux] Share a tmux session for pair programming with ssh

    By using ssh, you can share a tmux session, making pair programming much easier. We'll learn how to ...

  4. [TypeScript] Catch unsafe use of "this" in TypeScript functions

    this is probably the most tricky thing to use in JavaScript and therefore TypeScript. Fortunately th ...

  5. hdu 4644 BWT (kmp)

    看完题目你非常easy想到,这个题目的关键点就是怎样把给出的数组还原成原数组. 还原的原数组之后无论是AC自己主动机 还是 kmp都能够解决 - -尽管我认为kmp会超时的感觉. 那么怎样还原这个字符 ...

  6. P2P网贷第三方托管模式存在5大缺陷,护法是最大的赢家

    1.注冊开户须要2次,用户体验非常差劲儿.   理財人和借款人.首先在平台注冊,然后还要在第三方托管账户注冊.   非常多相似的地方,用户体验非常差劲.   比方.password4个.   平台:登 ...

  7. NOIP模拟 poke - 贪心

    题目大意: 给一副牌(\(n \le 1000000, a_i \le 1000000\)),问最多能打出多少对对子(x, x)或者顺子(x, x + 1, x + 2). 题目分析: 感觉跟斗地主很 ...

  8. idea-环境配置

    显示行号 Settings->Editor->Appearance标签项,勾选Show line numbers 关闭导航 在idea14版本中,上面有个代码导航,show breadcr ...

  9. ag-admin部署使用心得

    开源地址:https://github.com/wxiaoqi/Spring-Cloud-AG-Admin(后端)https://gitee.com/geek_qi/AG-Admin-v2.0(后端) ...

  10. 【17.69%】【codeforces 659F】Polycarp and Hay

    time limit per test4 seconds memory limit per test512 megabytes inputstandard input outputstandard o ...