我正在调试应用程序(特别是基于 PHP 的应用程序)中的 cURL 调用,并且非常想通过命令行测试相同的调用。该应用程序使用了许多 CURLOPTS,其中一些显然没有映射到命令行标志。
例如,CURLOPT_POSTFIELDS
映射到--data
,并CURLOPT_HEADER=1
映射到--include
(我实际上需要CURLOPT_HEADER=0
,但我还没有弄清楚)。
是否有任何文档将 CLI 标志映射到 CURLOPT_* 常量?还有更多选项我还没有得到,所以我不是在寻找关于特定选项的单一答案。
答案1
Stack Overflow 帖子 将命令行 cURL 转换为 PHP cURL 有 这个答案 其中包含极其详细的链接。请注意,相关性并不总是一对一的。
-a
–- 附加– 上传时附加到目标文件 →CURLOPT_FTPAPPEND
,CURLOPT_APPEND
- - 基本的– 使用 HTTP 基本身份验证 →
CURLAUTH_BASIC
- --cacert– 用于验证对等体的 CA 证书 →
CURLE_SSL_CACERT
,CURLE_SSL_CACERT_BADFILE
- --capath– 用于验证对等体的 CA 目录 →
CURLOPT_CAPATH
-E
–--证书– 客户端证书文件和密码 →CURLOPT_SSLCERT
,,,,,,,,,,CURLOPT_SSLCERTPASSWD
CURLOPT_SSLCERTTYPE
CURLE_SSL_CACERT
CURLE_SSL_CERTPROBLEM
CURLE_SSL_PEER_CERTIFICATE
CURLE_SSL_CACERT_BADFILE
CURLOPT_ISSUERCERT
CURLINFO_CERTINFO
CURLOPT_CERTINFO
- - 连接到– 连接到主机 →
CURLOPT_CONNECT_TO
-b
–- 曲奇饼– 从字符串/文件发送 cookie →CURLOPT_COOKIE
,,,,,,,CURLOPT_COOKIEFILE
CURLOPT_COOKIEJAR
CURLOPT_COOKIESESSION
CURL_LOCK_DATA_COOKIE
CURLINFO_COOKIELIST
CURLOPT_COOKIELIST
- --crlf– 上传时将 LF 转换为 CRLF →
CURLOPT_CRLF
,CURLOPT_CRLFILE
- --crl 文件– 从给定文件获取 PEM 格式的 CRL 列表 →
CURLOPT_CRLFILE
-d
–- 数据– HTTP POST 数据 →CURLOPT_READDATA
,,,,CURL_LOCK_DATA_COOKIE
CURL_LOCK_DATA_DNS
CURL_LOCK_DATA_SSL_SESSION
- - 代表团– GSS-API 委托权限 →
CURLGSSAPI_DELEGATION_FLAG
,,CURLGSSAPI_DELEGATION_POLICY_FLAG
CURLOPT_GSSAPI_DELEGATION
- - 消化– 使用 HTTP 摘要式身份验证 →
CURLAUTH_DIGEST
,CURLAUTH_DIGEST_IE
- –dns接口– 用于 DNS 请求的接口 →
CURLOPT_DNS_INTERFACE
- --dns 服务器– 要使用的 DNS 服务器地址 →
CURLOPT_DNS_SERVERS
- - 引擎– 要使用的加密引擎 →
CURLOPT_SSLENGINE
,,,,,CURLOPT_SSLENGINE_DEFAULT
CURLE_SSL_ENGINE_NOTFOUND
CURLE_SSL_ENGINE_SETFAILED
CURLINFO_SSL_ENGINES
-f
–- 失败– HTTP 错误时无提示失败(没有任何输出)→CURLOPT_FAILONERROR
,,,,,,,,CURLE_FAILED_INIT
CURLE_FTP_PORT_FAILED
CURLE_HTTP_PORT_FAILED
CURLE_LDAP_SEARCH_FAILED
CURLE_SSL_ENGINE_SETFAILED
CURLE_FTP_SSL_FAILED
CURL_FNMATCHFUNC_FAIL
-F
–- 形式– 指定多部分 MIME 数据 →CURLE_FTP_WEIRD_227_FORMAT
,,,,,CURLE_MALFORMAT_USER
CURLE_URL_MALFORMAT
CURLE_URL_MALFORMAT_USER
CURLM_CALL_MULTI_PERFORM
- –ftp 帐户– 账户数据字符串 →
CURLOPT_FTP_ACCOUNT
- --ftp 替代用户– 替换 USER [name] 的字符串 →
CURLOPT_FTP_ALTERNATIVE_TO_USER
-P
––ftp 端口– 使用 PORT 代替 PASV →CURLE_FTP_PORT_FAILED
- –ftp-跳过-pasv-ip– 跳过 PASV 的 IP 地址 →
CURLOPT_FTP_SKIP_PASV_IP
- ——ftp 服务器– 验证后发送CCC →
CURLOPT_FTP_SSL_CCC
-G
–- 得到– 将帖子数据放在 URL 中并使用 GET →CURLOPT_HTTPGET
,,,,CURLE_FTP_CANT_GET_HOST
CURLE_FTP_COULDNT_GET_SIZE
CURL_RTSPREQ_GET_PARAMETER
-I
–- 头– 仅显示文档信息 →CURLOPT_HEADER
,,,,,,,,,,CURLOPT_HEADERFUNCTION
CURLOPT_HTTPHEADER
CURLOPT_WRITEHEADER
CURLINFO_HEADER_OUT
CURLINFO_HEADER_SIZE
CURLHEADER_SEPARATE
CURLHEADER_UNIFIED
CURLOPT_HEADEROPT
CURLOPT_PROXYHEADER
-H
–--header– 将自定义标头传递给服务器 →CURLOPT_HEADER
,,,,,,,,,,CURLOPT_HEADERFUNCTION
CURLOPT_HTTPHEADER
CURLOPT_WRITEHEADER
CURLINFO_HEADER_OUT
CURLINFO_HEADER_SIZE
CURLHEADER_SEPARATE
CURLHEADER_UNIFIED
CURLOPT_HEADEROPT
CURLOPT_PROXYHEADER
- --http2– 使用 HTTP 2 →
CURLOPT_HTTP200ALIASES
,CURL_VERSION_HTTP2
- --忽略内容长度– 忽略远程资源的大小 →
CURLOPT_IGNORE_CONTENT_LENGTH
- - 界面– 使用网络接口(或地址)→
CURLOPT_INTERFACE
,CURLOPT_DNS_INTERFACE
-6
–--ipv6– 将名称解析为 IPv6 地址 →CURL_VERSION_IPV6
- - 钥匙– 私钥文件名 →
CURLOPT_SSLKEY
,,,,,,,,,,,CURLOPT_SSLKEYPASSWD
CURLOPT_SSLKEYTYPE
CURLE_SSL_PINNEDPUBKEYNOTMATCH
CURLOPT_SSH_PRIVATE_KEYFILE
CURLOPT_SSH_PUBLIC_KEYFILE
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5
CURLOPT_KEYPASSWD
CURLSSH_AUTH_KEYBOARD
CURLSSH_AUTH_PUBLICKEY
CURLOPT_PINNEDPUBLICKEY
- --krb– 启用 Kerberos 安全性 →
CURLOPT_KRB4LEVEL
,CURLOPT_KRBLEVEL
- --本地端口– 强制使用 RANGE 作为本地端口号 →
CURLINFO_LOCAL_PORT
-L
–- 地点– 遵循重定向 →CURLOPT_FOLLOWLOCATION
- --登录选项– 服务器登录选项 →
CURLOPT_LOGIN_OPTIONS
- --邮件身份验证– 原始电子邮件的发件人地址 →
CURLOPT_MAIL_AUTH
- --邮件发件人– 来自此地址的邮件 →
CURLOPT_MAIL_FROM
- --邮件接收– 邮寄至此地址 →
CURLOPT_MAIL_RCPT
- - 谈判– 使用 HTTP Negotiate (SPNEGO) 身份验证 →
CURLAUTH_GSSNEGOTIATE
,CURLAUTH_NEGOTIATE
-n
–--netrc– 必须读取 .netrc 中的用户名和密码 →CURLOPT_NETRC
,,,,,CURL_NETRC_IGNORED
CURL_NETRC_OPTIONAL
CURL_NETRC_REQUIRED
CURLOPT_NETRC_FILE
- --netrc 文件– 指定 netrc 的文件 →
CURLOPT_NETRC_FILE
- --netrc-可选– 使用 .netrc 或 URL →
CURL_NETRC_OPTIONAL
- --无代理– 不使用代理的主机列表 →
CURLOPT_NOPROXY
- --ntlm– 使用 HTTP NTLM 身份验证 →
CURLAUTH_NTLM
,CURLAUTH_NTLM_WB
- --ntlm-wb– 使用 winbind 的 HTTP NTLM 身份验证 →
CURLAUTH_NTLM_WB
- –oauth2 承载者– OAuth 2 Bearer 令牌 →
CURLOPT_XOAUTH2_BEARER
- - 经过– 私钥的密码 →
CURLOPT_SSLCERTPASSWD
,,,,,,,,,,,CURLOPT_SSLKEYPASSWD
CURLE_BAD_PASSWORD_ENTERED
CURLE_FTP_USER_PASSWORD_INCORRECT
CURLE_FTP_WEIRD_PASS_REPLY
CURLFTPSSL_CCC_PASSIVE
CURLOPT_KEYPASSWD
CURLSSH_AUTH_PASSWORD
CURLOPT_PASSWORD
CURLOPT_PROXYPASSWORD
CURLOPT_TLSAUTH_PASSWORD
- --路径为原样– 不要压缩 URL 路径中的 .. 序列 →
CURLOPT_PATH_AS_IS
- --pinnedpubkey– FILE/HASHES 用于验证对端的公钥 →
CURLE_SSL_PINNEDPUBKEYNOTMATCH
- --proto– 启用/禁用协议 →
CURLE_UNSUPPORTED_PROTOCOL
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CURLOPT_PROTOCOLS
CURLOPT_REDIR_PROTOCOLS
CURLPROTO_ALL
CURLPROTO_DICT
CURLPROTO_FILE
CURLPROTO_FTP
CURLPROTO_FTPS
CURLPROTO_HTTP
CURLPROTO_HTTPS
CURLPROTO_LDAP
CURLPROTO_LDAPS
CURLPROTO_SCP
CURLPROTO_SFTP
CURLPROTO_TELNET
CURLPROTO_TFTP
CURLPROTO_IMAP
CURLPROTO_IMAPS
CURLPROTO_POP3
CURLPROTO_POP3S
CURLPROTO_RTSP
CURLPROTO_SMTP
CURLPROTO_SMTPS
CURLPROTO_RTMP
CURLPROTO_RTMPE
CURLPROTO_RTMPS
CURLPROTO_RTMPT
CURLPROTO_RTMPTE
CURLPROTO_RTMPTS
CURLPROTO_GOPHER
CURLPROTO_SMB
CURLPROTO_SMBS
CURLOPT_DEFAULT_PROTOCOL
-x
–- 代理人– [protocol://]host[:port] 使用此代理 →CURLOPT_HTTPPROXYTUNNEL
,,,,,,,,,,,,,,,,,,,,,,,CURLOPT_PROXY
CURLOPT_PROXYPORT
CURLOPT_PROXYTYPE
CURLOPT_PROXYUSERPWD
CURLE_COULDNT_RESOLVE_PROXY
CURLPROXY_HTTP
CURLPROXY_SOCKS4
CURLPROXY_SOCKS5
CURLOPT_PROXYAUTH
CURLINFO_PROXYAUTH_AVAIL
CURLOPT_PROXY_TRANSFER_MODE
CURLPROXY_SOCKS4A
CURLPROXY_SOCKS5_HOSTNAME
CURLOPT_PROXYPASSWORD
CURLOPT_PROXYUSERNAME
CURLOPT_NOPROXY
CURLPROXY_HTTP_1_0
CURLOPT_PROXYHEADER
CURLOPT_PROXY_SERVICE_NAME
- –代理服务名称– SPNEGO 代理服务名称 →
CURLOPT_PROXY_SERVICE_NAME
-p
–--代理隧道– 通过 HTTP 代理隧道进行操作(使用 CONNECT)→CURLOPT_HTTPPROXYTUNNEL
- --公钥– SSH 公钥文件名 →
CURLE_SSL_PINNEDPUBKEYNOTMATCH
-Q
–- 引用– 传输前向服务器发送命令 →CURLOPT_POSTQUOTE
,,,,CURLOPT_PREQUOTE
CURLOPT_QUOTE
CURLE_FTP_QUOTE_ERROR
- --随机文件– 用于从 → 读取随机数据的文件
CURLOPT_RANDOM_FILE
-r
–- 范围– 仅检索 RANGE 内的字节 →CURLOPT_RANGE
,,CURLE_HTTP_RANGE_ERROR
CURLOPT_LOCALPORTRANGE
-e
–--引用者– 引荐来源网址 →CURLOPT_AUTOREFERER
,CURLOPT_REFERER
-X
–- 要求– 指定要使用的请求命令 →CURLOPT_CUSTOMREQUEST
,,CURLINFO_REQUEST_SIZE
CURLOPT_RTSP_REQUEST
- - 解决– 将主机+端口解析为此地址 →
CURLE_COULDNT_RESOLVE_HOST
,,,,,,,CURLE_COULDNT_RESOLVE_PROXY
CURLOPT_IPRESOLVE
CURL_IPRESOLVE_V4
CURL_IPRESOLVE_V6
CURL_IPRESOLVE_WHATEVER
CURLOPT_RESOLVE
- - 重试– 如果发生暂时性问题,请重试请求 →
CURLFTP_CREATE_DIR_RETRY
- --sasl-ir– 在 SASL 认证中启用初始响应 →
CURLOPT_SASL_IR
- - 服务名称– SPNEGO 服务名称 →
CURLOPT_PROXY_SERVICE_NAME
,CURLOPT_SERVICE_NAME
- --socks4– 给定主机 + 端口上的 SOCKS4 代理 →
CURLPROXY_SOCKS4
,CURLPROXY_SOCKS4A
- --socks4a– 给定主机 + 端口上的 SOCKS4a 代理 →
CURLPROXY_SOCKS4A
- --socks5– 给定主机 + 端口上的 SOCKS5 代理 →
CURLPROXY_SOCKS5
,,,,CURLPROXY_SOCKS5_HOSTNAME
CURLOPT_SOCKS5_GSSAPI_NEC
CURLOPT_SOCKS5_GSSAPI_SERVICE
- --socks5-gssapi– 为 SOCKS5 代理启用 GSS-API 身份验证 →
CURLOPT_SOCKS5_GSSAPI_NEC
,CURLOPT_SOCKS5_GSSAPI_SERVICE
- --socks5-gssapi-nec– 与 NEC SOCKS5 服务器兼容 →
CURLOPT_SOCKS5_GSSAPI_NEC
- --socks5-gssapi 服务– GSS-API 的 SOCKS5 代理服务名称 →
CURLOPT_SOCKS5_GSSAPI_SERVICE
- --socks5-主机名– SOCKS5 代理,将主机名传递给代理 →
CURLPROXY_SOCKS5_HOSTNAME
-Y
–- 速度极限– 停止比这更慢的传输 →CURLOPT_LOW_SPEED_LIMIT
-y
–--速度时间– 在此时间之后触发“速度限制”中止 →CURLOPT_LOW_SPEED_TIME
- --ssl– 尝试 SSL/TLS →
CURLOPT_SSLCERT
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CURLOPT_SSLCERTPASSWD
CURLOPT_SSLCERTTYPE
CURLOPT_SSLENGINE
CURLOPT_SSLENGINE_DEFAULT
CURLOPT_SSLKEY
CURLOPT_SSLKEYPASSWD
CURLOPT_SSLKEYTYPE
CURLOPT_SSLVERSION
CURLOPT_SSL_CIPHER_LIST
CURLOPT_SSL_VERIFYHOST
CURLOPT_SSL_VERIFYPEER
CURLE_SSL_CACERT
CURLE_SSL_CERTPROBLEM
CURLE_SSL_CIPHER
CURLE_SSL_CONNECT_ERROR
CURLE_SSL_ENGINE_NOTFOUND
CURLE_SSL_ENGINE_SETFAILED
CURLE_SSL_PEER_CERTIFICATE
CURLE_SSL_PINNEDPUBKEYNOTMATCH
CURLINFO_SSL_VERIFYRESULT
CURL_LOCK_DATA_SSL_SESSION
CURL_SSLVERSION_DEFAULT
CURL_SSLVERSION_SSLv2
CURL_SSLVERSION_SSLv3
CURL_SSLVERSION_TLSv1
CURL_VERSION_SSL
CURLE_FTP_SSL_FAILED
CURLFTPSSL_ALL
CURLFTPSSL_CONTROL
CURLFTPSSL_NONE
CURLFTPSSL_TRY
CURLOPT_FTP_SSL
CURLFTPAUTH_SSL
CURLOPT_FTPSSLAUTH
CURLINFO_SSL_ENGINES
CURLE_SSL_CACERT_BADFILE
CURLOPT_SSL_SESSIONID_CACHE
CURLOPT_FTP_SSL_CCC
CURLFTPSSL_CCC_ACTIVE
CURLFTPSSL_CCC_NONE
CURLFTPSSL_CCC_PASSIVE
CURLOPT_USE_SSL
CURLUSESSL_ALL
CURLUSESSL_CONTROL
CURLUSESSL_NONE
CURLUSESSL_TRY
CURLOPT_SSL_OPTIONS
CURLSSLOPT_ALLOW_BEAST
CURL_SSLVERSION_TLSv1_0
CURL_SSLVERSION_TLSv1_1
CURL_SSLVERSION_TLSv1_2
CURLOPT_SSL_ENABLE_ALPN
CURLOPT_SSL_ENABLE_NPN
CURLOPT_SSL_VERIFYSTATUS
CURLOPT_SSL_FALSESTART
CURLSSLOPT_NO_REVOKE
-2
–--sslv2– 使用 SSLv2 →CURL_SSLVERSION_SSLv2
-3
–--sslv3– 使用 SSLv3 →CURL_SSLVERSION_SSLv3
- --stderr– 将 stderr 重定向到哪里 →
CURLOPT_STDERR
- –tcp快速打开– 使用 TCP 快速打开 →
CURLOPT_TCP_FASTOPEN
- –tcp节点延迟– 使用 TCP_NODELAY 选项 →
CURLOPT_TCP_NODELAY
-t
–--telnet 选项– 设置 telnet 选项 →CURLE_TELNET_OPTION_SYNTAX
,CURLE_UNKNOWN_TELNET_OPTION
- –tftp-块大小– 设置 TFTP BLKSIZE 选项 →
CURLOPT_TFTP_BLKSIZE
- –tftp-无选项– 不发送任何 TFTP 选项 →
CURLOPT_TFTP_NO_OPTIONS
-1
–--tlsv1– 使用 TLSv1.0 或更高版本 →CURL_SSLVERSION_TLSv1
,,,,CURL_SSLVERSION_TLSv1_0
CURL_SSLVERSION_TLSv1_1
CURL_SSLVERSION_TLSv1_2
- --unix 套接字– 通过此 Unix 域套接字进行连接 →
CURLOPT_UNIX_SOCKET_PATH
- --url– 要使用的 URL →
CURLOPT_URL
-u
–- 用户– 服务器用户和密码 →CURLOPT_PROXYUSERPWD
,,,,,,,,,,,CURLOPT_USERAGENT
CURLOPT_USERPWD
CURLE_FTP_USER_PASSWORD_INCORRECT
CURLE_FTP_WEIRD_USER_REPLY
CURLE_MALFORMAT_USER
CURLE_URL_MALFORMAT_USER
CURLOPT_FTP_ALTERNATIVE_TO_USER
CURLOPT_PROXYUSERNAME
CURLOPT_USERNAME
CURLOPT_TLSAUTH_USERNAME
-v
–--详细– 让操作更加对话式 →CURLOPT_VERBOSE
-V
–- 版本– 显示版本号并退出 →CURLOPT_HTTP_VERSION
,,,,,,,,,,,,,,,,,,,,,,,,,,CURLOPT_SSLVERSION
CURLVERSION_NOW
CURL_HTTP_VERSION_1_0
CURL_HTTP_VERSION_1_1
CURL_HTTP_VERSION_NONE
CURL_SSLVERSION_DEFAULT
CURL_SSLVERSION_SSLv2
CURL_SSLVERSION_SSLv3
CURL_SSLVERSION_TLSv1
CURL_VERSION_IPV6
CURL_VERSION_KERBEROS4
CURL_VERSION_LIBZ
CURL_VERSION_SSL
CURL_HTTP_VERSION_2_0
CURL_VERSION_HTTP2
CURL_SSLVERSION_TLSv1_0
CURL_SSLVERSION_TLSv1_1
CURL_SSLVERSION_TLSv1_2
CURL_HTTP_VERSION_2
CURL_HTTP_VERSION_2TLS
CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE
请注意,这仅列出了 --long 选项与类似命名的 CURLOPT_ 常量的精确匹配。但它应该为您提供足够的提示,让您了解如何比较
curl --help
输出和 PHP curl_setopt() 列表。
答案2
回顾curl_setopt以及那里的所有选项 [ CURLOPT_XXX
],你可以从curl(1) - Linux 手册页文档并查看“选项“部分并详细说明每个参数,以确定与您可能需要利用的任何特定命令行选项相关的内容(如果适用)。
例如,在 CLICURLOPT_POSTFIELDS
上映射到的位置,你可以看到--data
curl(1) - Linux 手册页...
-d/--data <data>
(HTTP)通过 POST 请求将指定的数据发送到 HTTP 服务器...
...然后从curl_setopt
CURLOPT_POSTFIELDS
在 HTTP“POST”操作中发布的完整数据。...
要使用命令行向服务器发送POST
请求,您可以根据“请求”CLI 的“POST”和来自 HTTP 服务器的“操作”将两者关联起来。HTTP
curl
因此,根据您使用的数据类型或命令行选项,以及使用 curl、PHP 和 HTTP 操作构建的任何逻辑,映射这些逻辑所需的文档已经存在于这两个来源中,这将有所帮助。
我找不到具有这种关联的现有映射文档/资源,但我能够找到那些现有文档/资源以用于构建这种关联的映射列表。
所以当你问是否有任何文档将 CLI 标志映射到 CURLOPT_常数*...是的,我给你提供了一些资源和一个小例子。
提示:使用Ctrl+F
对每个资源按适用于您正在执行\研究的 HTTP 操作或 curl 请求的任何关键字进行搜索可能会很有用。