1、前言
使用 Postman 進(jìn)行接口測試,如下圖。
?在 Postman 的代碼段里,可以轉(zhuǎn)換你需要的不同語言的代碼,其中就可以轉(zhuǎn)換 cURL 代碼。
?將此代碼復(fù)制到命令行里執(zhí)行,可以執(zhí)行成功,請求結(jié)果和在 Postman 里執(zhí)行的結(jié)果一樣。
cURL 在命令行或腳本中用于傳輸數(shù)據(jù)。
?
2、簡介
cURL 是一個利用 URL 語法在命令行下工作的文件傳輸工具,1997年首次發(fā)行。它支持文件上傳和下載,所以是綜合傳輸工具,但按傳統(tǒng)習(xí)慣稱 cURL 為下載工具。cURL 還包含了用于程序開發(fā)的 libcurl。
cURL 支持的通信協(xié)議有 FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP 和 RTSP。
cURL 還用于汽車、電視機、路由器、打印機、音頻設(shè)備、移動電話、平板電腦、機頂盒、媒體播放器,是超過100億個安裝中數(shù)千個軟件應(yīng)用程序的互聯(lián)網(wǎng)傳輸引擎。
官方網(wǎng)址:
https://curl.se/
3、命令參數(shù)
基本操作命令:
curl?-X <method> [-H “xxx:xxx”]… [-d “xxx=xxx”]… url
-X :請求方式 GET、POST。。。。。。
-H :請求頭header
-d :POST/PUT/。。。請求所帶的form表單或body,GET請求無視這個參數(shù)
url :請求地址
示例1:GET請求
curl?-X GET?"http://httpbin.org/get?aaa=123&bbb=456"
?示例2:POST請求,參數(shù)為form表單
curl?-X POST?"http://httpbin.org/post"?-d?"aaa=123"?-d?"bbb=456"
?示例3:POST請求,參數(shù)為json,并且有請求頭header參數(shù)
curl?-X POST?"http://httpbin.org/post"?-H?"accesstoken: test123"?-H?"Content-Type: application/json"?-d?'{"cancel": 0,"services": [{"status": 1,"code": "001"}],"model": "demo","id": "test123-001"}'
?查找更多參數(shù),輸入命令?curl --help 即可。
wangmeng@wangmengdeMacBook-Pro ~ % curl --help
Usage: curl [options...]?<url>
?????--abstract-unix-socket <path> Connect via abstract Unix domain socket
?????--alt-svc <file name> Enable alt-svc with this cache file
?????--anyauth Pick any authentication method
?-a, --append Append to target file when uploading
?????--basic Use HTTP Basic Authentication
?????--cacert <file> CA certificate to verify peer against
?????--capath <dir> CA directory to verify peer against
?-E, --cert?<certificate[:password]>?Client certificate file and password
?????--cert-status Verify the status of the server certificate
?????--cert-type <type> Certificate file type (DER/PEM/ENG)
?????--ciphers <list of ciphers> SSL ciphers to use
?????--compressed Request compressed response
?????--compressed-ssh Enable SSH compression
?-K, --config?<file>?Read config from a file
?????--connect-timeout <seconds> Maximum time allowed for connection
?????--connect-to <HOST1:PORT1:HOST2:PORT2> Connect to host
?-C, --continue-at?<offset>?Resumed transfer offset
?-b, --cookie?<data|filename>?Send cookies from string/file
?-c, --cookie-jar?<filename>?Write cookies to?<filename>?after operation
?????--create-dirs Create necessary local directory hierarchy
?????--crlf Convert LF to CRLF in upload
?????--crlfile <file> Get a CRL list in PEM format from the given file
?-d, --data?<data>???HTTP POST data
?????--data-ascii <data> HTTP POST ASCII data
?????--data-binary <data> HTTP POST binary data
?????--data-raw <data> HTTP POST data, '@' allowed
?????--data-urlencode <data> HTTP POST data url encoded
?????--delegation <LEVEL> GSS-API delegation permission
?????--digest Use HTTP Digest Authentication
?-q, --disable Disable .curlrc
?????--disable-eprt Inhibit using EPRT or LPRT
?????--disable-epsv Inhibit using EPSV
?????--disallow-username-in-url Disallow username in url
?????--dns-interface <interface> Interface to use for DNS requests
?????--dns-ipv4-addr <address> IPv4 address to use for DNS requests
?????--dns-ipv6-addr <address> IPv6 address to use for DNS requests
?????--dns-servers <addresses> DNS server addrs to use
?????--doh-url <URL> Resolve host names over DOH
?-D, --dump-header?<filename>?Write the received headers to?<filename>
?????--egd-file <file> EGD socket path for random data
?????--engine <name> Crypto engine to use
?????--expect100-timeout <seconds> How long to wait for 100-continue
?-f, --fail Fail silently (no output at all) on HTTP errors
?????--fail-early Fail on first transfer error, do not continue
?????--false-start Enable TLS False Start
?-F, --form?<name=content>?Specify multipart MIME data
?????--form-string <name=string> Specify multipart MIME data
?????--ftp-account <data> Account data string
?????--ftp-alternative-to-user <command> String to replace USER [name]
?????--ftp-create-dirs Create the remote dirs if not present
?????--ftp-method <method> Control CWD usage
?????--ftp-pasv Use PASV/EPSV instead of PORT
?-P, --ftp-port?<address>?Use PORT instead of PASV
?????--ftp-pret Send PRET before PASV
?????--ftp-skip-pasv-ip Skip the IP address for PASV
?????--ftp-ssl-ccc Send CCC after authenticating
?????--ftp-ssl-ccc-mode <active/passive> Set CCC mode
?????--ftp-ssl-control Require SSL/TLS for FTP login, clear for transfer
?-G, --get Put the post data in the URL and use GET
?-g, --globoff Disable URL sequences and ranges using {} and []
?????--happy-eyeballs-timeout-ms <milliseconds> How long to wait in milliseconds for IPv6 before trying IPv4
?????--haproxy-protocol Send HAProxy PROXY protocol v1 header
?-I, --head Show document info only
?-H, --header?<header/@file>?Pass custom header(s) to server
?-h, --help This help text
?????--hostpubmd5 <md5> Acceptable MD5 hash of the host public key
?????--http0.9 Allow HTTP 0.9 responses
?-0, --http1.0 Use HTTP 1.0
?????--http1.1 Use HTTP 1.1
?????--http2 Use HTTP 2
?????--http2-prior-knowledge Use HTTP 2 without HTTP/1.1 Upgrade
?????--ignore-content-length Ignore the size of the remote resource
?-i, --include Include protocol response headers in the output
?-k, --insecure Allow insecure server connections when using SSL
?????--interface <name> Use network INTERFACE (or address)
?-4, --ipv4 Resolve names to IPv4 addresses
?-6, --ipv6 Resolve names to IPv6 addresses
?-j, --junk-session-cookies Ignore session cookies read from file
?????--keepalive-time <seconds> Interval time for keepalive probes
?????--key <key> Private key file name
?????--key-type <type> Private key file type (DER/PEM/ENG)
?????--krb <level> Enable Kerberos with security <level>
?????--libcurl <file> Dump libcurl equivalent code of this command line
?????--limit-rate <speed> Limit transfer speed to RATE
?-l, --list-only List only mode
?????--local-port <num/range> Force use of RANGE for local port numbers
?-L, --location Follow redirects
?????--location-trusted Like --location, and send auth to other hosts
?????--login-options <options> Server login options
?????--mail-auth <address> Originator address of the original email
?????--mail-from <address> Mail from this address
?????--mail-rcpt <address> Mail to this address
?-M, --manual Display the full manual
?????--max-filesize <bytes> Maximum file size to download
?????--max-redirs <num> Maximum number of redirects allowed
?-m, --max-time?<seconds>?Maximum time allowed for the transfer
?????--metalink Process given URLs as metalink XML file
?????--negotiate Use HTTP Negotiate (SPNEGO) authentication
?-n, --netrc Must read .netrc for user name and password
?????--netrc-file <filename> Specify FILE for netrc
?????--netrc-optional Use either .netrc or URL
?-:, --next Make next URL use its separate set of options
?????--no-alpn Disable the ALPN TLS extension
?-N, --no-buffer Disable buffering of the output stream
?????--no-keepalive Disable TCP keepalive on the connection
?????--no-npn Disable the NPN TLS extension
?????--no-sessionid Disable SSL session-ID reusing
?????--noproxy <no-proxy-list> List of hosts which do not use proxy
?????--ntlm Use HTTP NTLM authentication
?????--ntlm-wb Use HTTP NTLM authentication with winbind
?????--oauth2-bearer <token> OAuth 2 Bearer Token
?-o, --output?<file>?Write to file instead of stdout
?????--pass <phrase> Pass phrase for the private key
?????--path-as-is Do not squash .. sequences in URL path
?????--pinnedpubkey <hashes> FILE/HASHES Public key to verify peer against
?????--post301 Do not switch to GET after following a 301
?????--post302 Do not switch to GET after following a 302
?????--post303 Do not switch to GET after following a 303
?????--preproxy [protocol://]host[:port] Use this proxy first
?-#, --progress-bar Display transfer progress as a bar
?????--proto <protocols> Enable/disable PROTOCOLS
?????--proto-default <protocol> Use PROTOCOL for any URL missing a scheme
?????--proto-redir <protocols> Enable/disable PROTOCOLS on redirect
?-x, --proxy [protocol://]host[:port] Use this proxy
?????--proxy-anyauth Pick any proxy authentication method
?????--proxy-basic Use Basic authentication on the proxy
?????--proxy-cacert <file> CA certificate to verify peer against for proxy
?????--proxy-capath <dir> CA directory to verify peer against for proxy
?????--proxy-cert <cert[:passwd]> Set client certificate for proxy
?????--proxy-cert-type <type> Client certificate type for HTTPS proxy
?????--proxy-ciphers <list> SSL ciphers to use for proxy
?????--proxy-crlfile <file> Set a CRL list for proxy
?????--proxy-digest Use Digest authentication on the proxy
?????--proxy-header <header/@file> Pass custom header(s) to proxy
?????--proxy-insecure Do HTTPS proxy connections without verifying the proxy
?????--proxy-key <key> Private key for HTTPS proxy
?????--proxy-key-type <type> Private key file type for proxy
?????--proxy-negotiate Use HTTP Negotiate (SPNEGO) authentication on the proxy
?????--proxy-ntlm Use NTLM authentication on the proxy
?????--proxy-pass <phrase> Pass phrase for the private key for HTTPS proxy
?????--proxy-pinnedpubkey <hashes> FILE/HASHES public key to verify proxy with
?????--proxy-service-name <name> SPNEGO proxy service name
?????--proxy-ssl-allow-beast Allow security flaw for interop for HTTPS proxy
?????--proxy-tls13-ciphers <ciphersuite list> TLS 1.3 proxy cipher suites
?????--proxy-tlsauthtype <type> TLS authentication type for HTTPS proxy
?????--proxy-tlspassword <string> TLS password for HTTPS proxy
?????--proxy-tlsuser <name> TLS username for HTTPS proxy
?????--proxy-tlsv1 Use TLSv1 for HTTPS proxy
?-U, --proxy-user?<user:password>?Proxy user and password
?????--proxy1.0 <host[:port]> Use HTTP/1.0 proxy on given port
?-p, --proxytunnel Operate through an HTTP proxy tunnel (using CONNECT)
?????--pubkey <key> SSH Public key file name
?-Q, --quote Send command(s) to server before transfer
?????--random-file <file> File for reading random data from
?-r, --range?<range>?Retrieve only the bytes within RANGE
?????--raw Do HTTP "raw"; no transfer decoding
?-e, --referer?<URL>?Referrer URL
?-J, --remote-header-name Use the header-provided filename
?-O, --remote-name Write output to a file named as the remote file
?????--remote-name-all Use the remote file name for all URLs
?-R, --remote-time Set the remote file's time on the local output
?-X, --request?<command>?Specify request command to use
?????--request-target Specify the target for this request
?????--resolve <host:port:address[,address]...> Resolve the host+port to this address
?????--retry <num> Retry request if transient problems occur
?????--retry-connrefused Retry on connection refused (use with --retry)
?????--retry-delay <seconds> Wait time between retries
?????--retry-max-time <seconds> Retry only within this period
?????--sasl-ir Enable initial response in SASL authentication
?????--service-name <name> SPNEGO service name
?-S, --show-error Show error even when -s is used
?-s, --silent Silent mode
?????--socks4 <host[:port]> SOCKS4 proxy on given host + port
?????--socks4a <host[:port]> SOCKS4a proxy on given host + port
?????--socks5 <host[:port]> SOCKS5 proxy on given host + port
?????--socks5-basic Enable username/password auth for SOCKS5 proxies
?????--socks5-gssapi Enable GSS-API auth for SOCKS5 proxies
?????--socks5-gssapi-nec Compatibility with NEC SOCKS5 server
?????--socks5-gssapi-service <name> SOCKS5 proxy service name for GSS-API
?????--socks5-hostname <host[:port]> SOCKS5 proxy, pass host name to proxy
?-Y, --speed-limit?<speed>?Stop transfers slower than this
?-y, --speed-time?<seconds>?Trigger 'speed-limit' abort after this time
?????--ssl Try SSL/TLS
?????--ssl-allow-beast Allow security flaw to improve interop
?????--ssl-no-revoke Disable cert revocation checks (Schannel)
?????--ssl-reqd Require SSL/TLS
?-2, --sslv2 Use SSLv2
?-3, --sslv3 Use SSLv3
?????--stderr Where to redirect stderr
?????--styled-output Enable styled output for HTTP headers
?????--suppress-connect-headers Suppress proxy CONNECT response headers
?????--tcp-fastopen Use TCP Fast Open
?????--tcp-nodelay Use the TCP_NODELAY option
?-t, --telnet-option?<opt=val>?Set telnet option
?????--tftp-blksize <value> Set TFTP BLKSIZE option
?????--tftp-no-options Do not send any TFTP options
?-z, --time-cond?<time>?Transfer based on a time condition
?????--tls-max <VERSION> Set maximum allowed TLS version
?????--tls13-ciphers <list of TLS 1.3 ciphersuites> TLS 1.3 cipher suites to use
?????--tlsauthtype <type> TLS authentication type
?????--tlspassword TLS password
?????--tlsuser <name> TLS user name
?-1, --tlsv1 Use TLSv1.0 or greater
?????--tlsv1.0 Use TLSv1.0 or greater
?????--tlsv1.1 Use TLSv1.1 or greater
?????--tlsv1.2 Use TLSv1.2 or greater
?????--tlsv1.3 Use TLSv1.3 or greater
?????--tr-encoding Request compressed transfer encoding
?????--trace <file> Write a debug trace to FILE
?????--trace-ascii <file> Like --trace, but without hex output
?????--trace-time Add time stamps to trace/verbose output
?????--unix-socket <path> Connect through this Unix domain socket
?-T, --upload-file?<file>?Transfer local FILE to destination
?????--url <url> URL to work with
?-B, --use-ascii Use ASCII/text transfer
?-u, --user?<user:password>?Server user and password
?-A, --user-agent?<name>?Send User-Agent?<name>?to server
?-v, --verbose Make the operation more talkative
?-V, --version Show version number and quit
?-w, --write-out?<format>?Use output FORMAT after completion
?????--xattr Store metadata in extended file attributes
4、將cURL命令轉(zhuǎn)換為其他語言
推薦一個網(wǎng)址:
https://curlconverter.com/
可以將 cURL 命令轉(zhuǎn)換為 Python、JavaScript、PHP、R、Go、C#、Ruby、Rust、Elixir、Java、MATLAB、Dart、CFML、Ansible URI 或 JSON。
打開此頁面。
?示例:如下圖是 Postman 一個接口的執(zhí)行結(jié)果
將此接口的 cURL 代碼拷貝進(jìn)去,生成想要的代碼,例如 Python。
將生成的 Python 代碼復(fù)制后,進(jìn)行執(zhí)行。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公眾號:AllTests軟件測試
import?requests
headers = {
????'accesstoken':?'test123',
????'Content-Type':?'application/json',
}
json_data = {
????'cancel':?0,
????'services': [
????????{
????????????'status':?1,
????????????'code':?'001',
????????},
????],
????'model':?'基礎(chǔ)款',
????'id':?'test123-001',
}
response = requests.post('http://httpbin.org/post', headers=headers, json=json_data)
print(response.text)
執(zhí)行結(jié)果和在 Postman 上執(zhí)行的結(jié)果一致。
?
5、將cURL命令轉(zhuǎn)換為Python請求的庫
Uncurl?是一個庫,允許你將?cURL?命令轉(zhuǎn)換為使用?requests?的?Python?代碼。由于?Chrome?網(wǎng)絡(luò)檢查器有一個漂亮的“復(fù)制為cURL”,因此該工具對于在?Python?中重新創(chuàng)建瀏覽器請求非常有用。
GitHub地址:
https://github.com/spulec/uncurl
安裝
pip?install?uncurl
代碼示例:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公眾號:AllTests軟件測試
import?uncurl
context =?"curl -X POST 'http://httpbin.org/post' -H 'accesstoken: test123' -H 'Content-Type: application/json' -d '{\"cancel\": 0,\"services\": [{\"status\": 1,\"code\": \"001\"}],\"model\": \"demo\",\"id\": \"test123-001\"}'"
print(uncurl.parse(context))
運行結(jié)果,已經(jīng)將?cURL?命令轉(zhuǎn)換為?Python?請求。
接下來將轉(zhuǎn)換后的?Python?請求腳本執(zhí)行一下。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公眾號:AllTests軟件測試
import?requests
response = requests.post("http://httpbin.org/post",
????data='{"cancel": 0,"services": [{"status": 1,"code": "001"}],"model": "demo","id": "test123-001"}',
????headers={
????????"Content-Type":?"application/json",
????????"accesstoken":?"test123"
????},
????cookies={},
????auth=(),
)
print(response.text)
請求結(jié)果,執(zhí)行成功。
?
6、將Python請求轉(zhuǎn)換為cURL命令的庫
Curlify?是一個庫,允許你將?Python?請求轉(zhuǎn)換為?cURL?命令。
GitHub地址:
https://github.com/ofw/curlify
安裝:
pip?install?curlify
代碼示例:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公眾號:傷心的辣條
import?curlify
import?requests
response = requests.post("http://httpbin.org/post",
????data='{"cancel": 0,"services": [{"status": 1,"code": "001"}],"model": "demo","id": "test123-001"}',
????headers={
????????"Content-Type":?"application/json",
????????"accesstoken":?"test123"
????},
????cookies={},
????auth=(),
)
print(curlify.to_curl(response.request))
運行結(jié)果,已經(jīng)將?Python?請求轉(zhuǎn)換為?cURL?命令。
?
在命令行上執(zhí)行?cURL?命令,執(zhí)行成功。
最后:?下方這份完整的軟件測試視頻學(xué)習(xí)教程已經(jīng)整理上傳完成,朋友們?nèi)绻枰梢宰孕忻赓M領(lǐng)取【保證100%免費】
這些資料,對于【軟件測試】的朋友來說應(yīng)該是最全面最完整的備戰(zhàn)倉庫,這個倉庫也陪伴上萬個測試工程師們走過最艱難的路程,希望也能幫助到你!文章來源:http://www.zghlxwxcb.cn/news/detail-618866.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-618866.html
到了這里,關(guān)于命令行工具-cURL(用于使用URL傳輸數(shù)據(jù))的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!