`
frank1998819
  • 浏览: 758204 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类

使用curl指令測試REST服務(转)

 
阅读更多
curl 指令 rest

cURL 是很方便的Rest客戶端,可以很方便的完成許多Rest API測試的需求,甚至,如果是需要先登入或認證的rest api,也可以進行測試,利用curl指令,可以送出HTTP GET, POST, PUT, DELETE, 也可以改變 HTTP header來滿足使用REST API需要的特定條件。

curl的參數很多,這邊僅列出目前測試REST時常用到的:

-X/--request [GET|POST|PUT|DELETE|…]  使用指定的http method發出 http request
-H/--header                           設定request裡的header
-i/--include                          顯示response的header
-d/--data                             設定 http parameters
-v/--verbose                          輸出比較多的訊息
-u/--user                             使用者帳號、密碼
-b/--cookie                           cookie 

    linux command line 的參數常,同一個功能常會有兩個功能完全相同參數,一個是比較短的參數,前面通常是用-(一個-)導引符號,另一個比較長的參數,通常會用--(兩個-)導引符號

    在curl 使用說明

      -X, --request COMMAND  Specify request command to use
          --resolve HOST:PORT:ADDRESS  Force resolve of HOST:PORT to ADDRESS
          --retry NUM   Retry request NUM times if transient problems occur
          --retry-delay SECONDS When retrying, wait this many seconds between each
          --retry-max-time SECONDS  Retry only within this period>

    參數-X跟--request兩個功能是一樣的,所以使用時 ex:curl -X POST http://www.example.com/ 跟 curl --request POST http://www.example.com/ 是相等的功能

GET/POST/PUT/DELETE使用方式

-X 後面加 http method,

curl -X GET "http://www.rest.com/api/users"
curl -X POST "http://www.rest.com/api/users"
curl -X PUT "http://www.rest.com/api/users"
curl -X DELETE "http://www.rest.com/api/users"

url要加引號也可以,不加引號也可以,如果有非純英文字或數字外的字元,不加引號可能會有問題,如果是網碼過的url,也要加上引號
HEADER

在http header加入的訊息

curl -v -i -H "Content-Type: application/json" http://www.example.com/users

HTTP Parameter

http參數可以直接加在url的query string,也可以用-d帶入參數間用&串接,或使用多個-d

# 使用`&`串接多個參數
curl -X POST -d "param1=value1&param2=value2"
# 也可使用多個`-d`,效果同上
curl -X POST -d "param1=value1" -d "param2=value2"
curl -X POST -d "param1=a 0space"    
# "a space" url encode後空白字元會編碼成'%20'為"a%20space",編碼後的參數可以直接使用
curl -X POST -d "param1=a%20space"    

post json 格式得資料

如同時需要傳送request parameter跟json,request parameter可以加在url後面,json資料則放入-d的參數,然後利用單引號將json資料含起來(如果json內容是用單引號,-d的參數則改用雙引號包覆),header要加入”Content-Type:application/json”跟”Accept:application/json”

curl http://www.example.com?modifier=kent -X PUT -i -H "Content-Type:application/json" -H "Accept:application/json" -d '{"boolean" : false, "foo" : "bar"}'
# 不加"Accept:application/json"也可以
curl http://www.example.com?modifier=kent -X PUT -i -H "Content-Type:application/json" -d '{"boolean" : false, "foo" : "bar"}'

需先認證或登入才能使用的service

許多服務,需先進行登入或認證後,才能存取其API服務,依服務要求的條件,的curl可以透過cookie,session或加入在header加入session key,api key或認證的token來達到認證的效果。

session 例子:

後端如果是用session記錄使用者登入資訊,後端會傳一個 session id給前端,前端需要在每次跟後端的requests的header中置入此session id,後端便會以此session id識別前端是屬於那個session,以達到session的效果

curl --request GET 'http://www.rest.com/api/users' --header 'sessionid:1234567890987654321'

cookie 例子

如果是使用cookie,在認證後,後端會回一個cookie回來,把該cookie成檔案,當要存取需要任務的url時,再用-b cookie_file 的方式在request中植入cookie即可正常使用

# 將cookie存檔
curl -i -X POST -d username=kent -d password=kent123 -c  ~/cookie.txt  http://www.rest.com/auth
# 載入cookie到request中
curl -i --header "Accept:application/json" -X GET -b ~/cookie.txt http://www.rest.com/users/1

檔案上傳

curl -i -X POST -F 'file=@/Users/kent/my_file.txt' -F 'name=a_file_name'

這個是透過 HTTP multipart POST 上傳資料, -F 是使用http query parameter的方式,指定檔案位置的參數要加上@
HTTP Basic Authentication (HTTP基本認證)

如果網站是採HTTP基本認證, 可以使用 --user username:password 登入

curl -i --user kent:secret http://www.rest.com/api/foo'   

認證失敗時,會是401 Unauthorized

HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
WWW-Authenticate: Basic realm="Realm"
Content-Type: text/html;charset=utf-8
Content-Language: en
Content-Length: 1022
Date: Thu, 15 May 2014 06:32:49 GMT

認證通過時,會回應 200 OK

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Set-Cookie: JSESSIONID=A75066DCC816CE31D8F69255DEB6C30B; Path=/mdserver/; HttpOnly
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 15 May 2014 06:14:11 GMT

可以把認證後的cookie存起來,重複使用

curl -i --user kent:secret http://www.rest.com/api/foo' -c ~/cookies.txt

登入之前暫存的cookies,可以不用每次都認證

curl -i  http://www.rest.com/api/foo' -b ~/cookies.txt

相關資源

    http://linux.about.com/od/commands/l/blcmdl1_curl.htm - curl 手冊
分享到:
评论

相关推荐

    qt5使用curl实现文件下载的示例程序

    例如,可以使用`curl_easy_init()`初始化cURL会话,然后使用`curl_easy_setopt()`设置不同的选项。 3. **文件下载过程**: - 设置URL:`curl_easy_setopt(curl, CURLOPT_URL, ...

    curl loader 性能测试工具

    curl loader 性能测试工具curl loader 性能测试工具

    简单使用curl进行get请求并将服务器返回存进本地文件

    通过学习和熟练使用`curl`的各种选项,你可以在命令行环境中高效地进行Web服务的测试和数据抓取。在实际工作中,`curl`经常被开发者用来快速验证API接口、调试网络问题,或者作为自动化脚本的一部分。希望这个简短的...

    rest api 接口测试工具

    三、使用Advanced REST Client进行测试 1. 安装与启动:在Chrome浏览器的Web Store中搜索并安装ARC,然后在浏览器右上角的扩展图标中启动。 2. 创建请求:输入API的URL,选择合适的HTTP方法,添加必要的参数和请求头...

    Qt工程中使用curl进行网络请求,最小程序

    在C++项目中,我们可以使用curl库进行各种网络通信任务。 **Qt框架介绍** Qt是一个跨平台的应用程序开发框架,广泛用于创建GUI应用。它提供了一整套工具、库和IDE,使得开发者能够轻松地构建高效、美观的桌面和移动...

    Kepware IOT gateway使用教程 - REST Sever

    通过配置网络设置、选择数据源、设置安全选项,以及使用 curl 工具进行测试,可以实现 IoT 设备与云端或企业系统的无缝集成。这为 IoT 应用场景提供了强大支持,无论是在自动化、监控还是数据分析等领域。

    C# 实现Rest服务接口,含实现文档

    8. **测试REST接口**:使用工具如Postman或curl,模拟不同HTTP方法的请求,验证接口的正确性和性能。 9. **项目结构**:根据描述,项目代码结构清晰,可以直接在Visual Studio 2013中运行,这表明源码组织良好,...

    REST WebService简单应用(测试)

    - **单元测试和集成测试**:编写测试用例,验证REST服务的功能正确性和性能。 5. **源码解析**: - 通常会有一个主类启动Grizzly服务器,配置监听端口和处理器。 - 接口类定义REST资源和方法,使用JAX-RS注解。 ...

    java--curl工具,用于生成curl链接,直接在服务器上使用

    当遇到服务间通信问题时,开发者不再需要手动构造curl命令,只需查看生成的curl命令,就能在任何支持curl的环境(如本地开发环境或测试服务器)中复现问题,从而加速问题排查。 总的来说,这个Java工具包结合了...

    linux sftp、ftp上传(使用curl)

    本文将深入探讨如何使用curl命令来实现在Linux环境下进行SFTP和FTP上传操作。 首先,让我们了解一下SFTP。SFTP是一种基于SSH(Secure Shell)的安全文件传输协议,它提供了安全的数据传输,保护了用户的登录凭证和...

    Go-Hargo解析HAR文件可以转换为curl格式并作为负载测试驱动程序

    Hargo这个工具,正是利用HAR文件来执行负载测试,使得开发者能够模拟真实用户的行为,对服务进行压力测试,找出性能瓶颈和潜在问题。 Hargo的实现基于Go语言,利用其强大的并发特性,可以轻松地并发发送多个请求,...

    windows 下可以使用curl命令

    总的来说,curl在Windows环境下提供了一个强大且灵活的工具,用于处理各种网络任务,包括文件的下载、上传,以及对HTTP服务的测试和调试。其丰富的选项和功能使其成为开发者和系统管理员的得力助手。尽管在Windows上...

    ES-CURL命令使用 - 副本.docx

    Elasticsearch-CURL是Elasticsearch日常管理、调试和开发的重要工具,熟练掌握其使用能极大地提高工作效率。需要注意的是,当操作涉及真实数据时,应确保有适当的数据备份和恢复策略,以防止意外的数据丢失或损坏。...

    使用CURL抓取网页数据

    本教程将详细讲解如何使用CURL来抓取网页数据,并结合C++的STL字符串进行分析,最终将提取的数据写入log.txt文件。 首先,我们要了解CURL的基本用法。CURL可以用来发送HTTP请求,获取服务器的响应。例如,使用CURL...

    curl c++使用

    【标题】:“curl c++使用” 在C++编程中,`curl`库是一个非常重要的工具,它允许开发者通过命令行接口或API实现HTTP、HTTPS和其他网络协议的客户端功能。本篇将详细介绍如何在C++项目中集成和使用`curl`库进行网络...

    rest-curlclient-php:使用cURL的基本REST客户端

    使用cURL的基本REST客户端 支持PUT,GET,POST,DELETE并使用cURL的简单实现。 基于rest-client-php ,感谢他的工作。 它是为像我这样的人制作的,在某些情况下无法使用pecl_http。 支持GET,POST,PUT,DELETE ...

    Qt工程中用curl发送post请求,发送json返回json

    在Qt工程中,使用curl库发送POST请求并处理JSON数据是一项常见的任务,特别是在与Web服务交互时。这里我们将深入探讨如何实现这一功能。 首先,`curl`是一个强大的命令行工具和库,用于传输数据,支持多种协议,...

    开源测试工具curl-loader

    1. **模拟多客户端请求**:curl-loader能同时模拟成千上万的客户端,这对于测试高并发场景下的Web服务性能至关重要。这种模拟可以精确地反映出在大规模用户访问时,服务器的响应速度和稳定性。 2. **IP地址变换**:...

    使用curl-config配置选项

    curl-config 配置选项的使用 curl-config 是一个命令行工具,用于显示关于 curl 和 libcurl 安装的信息。下面是对 curl-config 的详细介绍: curl-config 的使用 curl-config 可以使用多种选项来显示不同的信息。...

    curl命令行测试工具

    curl命令是在命令行方式下工作,利用URL的语法进行数据的传输或者文件的传输。 curl ...

Global site tag (gtag.js) - Google Analytics