【问题标题】:Convert command line cURL to PHP cURL将命令行 cURL 转换为 PHP cURL
【发布时间】:2009-12-21 11:35:52
【问题描述】:

我以前从未做过任何卷曲,所以需要一些帮助。我试图从示例中解决这个问题,但无法理解它!

我有一个 curl 命令,我可以从 linux(ubuntu) 命令行成功运行,该命令行通过 api 将文件放入 wiki。

我需要将此 curl 命令合并到我正在构建的 PHP 脚本中。

如何翻译这个 curl 命令以便它在 PHP 脚本中工作?

curl -b cookie.txt -X PUT \
     --data-binary "@test.png" \
     -H "Content-Type: image/png" \    
     "http://hostname/@api/deki/pages/=TestPage/files/=test.png" \
     -0

cookie.txt 包含身份验证,但我将其以明文形式放在脚本中没有问题,因为它只会由我运行。

@test.png 必须是 $filename 等变量

http://hostname/@api/deki/pages/=TestPage/files/=必须是$pageurl等变量

感谢您的帮助。

【问题讨论】:

标签: php curl


【解决方案1】:

起点:

<?php

$pageurl = "http://hostname/@api/deki/pages/=TestPage/files/=";
$filename = "test.png";

$theurl = $pageurl . $filename;

$ch = curl_init($theurl);
curl_setopt($ch, CURLOPT_COOKIE, ...); // -b
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); // -X
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: image/png']); // -H
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); // -0

...
?>

另请参阅:http://www.php.net/manual/en/function.curl-setopt.php

【讨论】:

    【解决方案2】:

    你需要...

    curl-to-PHP : https://incarnate.github.io/curl-to-php/

    “立即将 curl 命令转换为 PHP 代码”

    【讨论】:

    • 我正要建议。优秀的工具
    • 哇,不知道有这样的工具。感谢您为我节省了这么多时间。
    【解决方案3】:

    无论您在命令行中使用哪个 cURL,都可以使用此工具将其转换为 PHP:

    https://incarnate.github.io/curl-to-php/
    

    在长时间寻找解决方案后,它帮助了我!希望它也能帮助你!你的解决方案是这样的:

    // Generated by curl-to-PHP: http://incarnate.github.io/curl-to-php/
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, "http://hostname/@api/deki/pages/=TestPage/files/=test.png");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $post = array(
        "file" => "@" .realpath("test.png")
    );
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
    
    
    $headers = array();
    $headers[] = "Content-Type: image/png";
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    
    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close ($ch);
    

    【讨论】:

    • 非常感谢:incarnate.github.io/curl-to-php,我花了将近一天的时间来弄清楚如何正确设置标题
    • 我很高兴它有所帮助。只是一个疯狂的想法 - 例如,你也可以支持我的答案和 cmets ;)
    【解决方案4】:

    这是一个自动生成的列表,其中curl commandline options 可能映射到哪个 php CURLOPT_ 常量:

    --arg description curl_setopt()
    -a
    --append
    Append to target file when uploading CURLOPT_FTPAPPEND, CURLOPT_APPEND
    --basic Use HTTP Basic Authentication CURLAUTH_BASIC
    --cacert &lt;file&gt; CA certificate to verify peer against CURLE_SSL_CACERT, CURLE_SSL_CACERT_BADFILE
    --capath &lt;dir&gt; CA directory to verify peer against CURLOPT_CAPATH
    -E
    --cert &lt;certificate[:password]&gt;
    Client certificate file and password 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
    --connect-to &lt;HOST1:PORT1:HOST2:PORT2&gt; Connect to host CURLOPT_CONNECT_TO
    -b
    --cookie &lt;data&gt;
    Send cookies from string/file CURLOPT_COOKIE, CURLOPT_COOKIEFILE, CURLOPT_COOKIEJAR, CURLOPT_COOKIESESSION, CURL_LOCK_DATA_COOKIE, CURLINFO_COOKIELIST, CURLOPT_COOKIELIST
    --crlf Convert LF to CRLF in upload CURLOPT_CRLF, CURLOPT_CRLFILE
    --crlfile &lt;file&gt; Get a CRL list in PEM format from the given file CURLOPT_CRLFILE
    -d
    --data &lt;data&gt;
    HTTP POST data CURLOPT_READDATA, CURL_LOCK_DATA_COOKIE, CURL_LOCK_DATA_DNS, CURL_LOCK_DATA_SSL_SESSION
    --delegation &lt;LEVEL&gt; GSS-API delegation permission CURLGSSAPI_DELEGATION_FLAG, CURLGSSAPI_DELEGATION_POLICY_FLAG, CURLOPT_GSSAPI_DELEGATION
    --digest Use HTTP Digest Authentication CURLAUTH_DIGEST, CURLAUTH_DIGEST_IE
    --dns-interface &lt;interface&gt; Interface to use for DNS requests CURLOPT_DNS_INTERFACE
    --dns-servers &lt;addresses&gt; DNS server addrs to use CURLOPT_DNS_SERVERS
    --engine &lt;name&gt; Crypto engine to use CURLOPT_SSLENGINE, CURLOPT_SSLENGINE_DEFAULT, CURLE_SSL_ENGINE_NOTFOUND, CURLE_SSL_ENGINE_SETFAILED, CURLINFO_SSL_ENGINES
    -f
    --fail
    Fail silently (no output at all) on HTTP errors 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
    --form &lt;name=content&gt;
    Specify multipart MIME data CURLE_FTP_WEIRD_227_FORMAT, CURLE_MALFORMAT_USER, CURLE_URL_MALFORMAT, CURLE_URL_MALFORMAT_USER, CURLM_CALL_MULTI_PERFORM
    --ftp-account &lt;data&gt; Account data string CURLOPT_FTP_ACCOUNT
    --ftp-alternative-to-user &lt;command&gt; String to replace USER [name] CURLOPT_FTP_ALTERNATIVE_TO_USER
    -P
    --ftp-port &lt;address&gt;
    Use PORT instead of PASV CURLE_FTP_PORT_FAILED
    --ftp-skip-pasv-ip Skip the IP address for PASV CURLOPT_FTP_SKIP_PASV_IP
    --ftp-ssl-ccc Send CCC after authenticating CURLOPT_FTP_SSL_CCC
    -G
    --get
    Put the post data in the URL and use GET CURLOPT_HTTPGET, CURLE_FTP_CANT_GET_HOST, CURLE_FTP_COULDNT_GET_SIZE, CURL_RTSPREQ_GET_PARAMETER
    -I
    --head
    Show document info only CURLOPT_HEADER, CURLOPT_HEADERFUNCTION, CURLOPT_HTTPHEADER, CURLOPT_WRITEHEADER, CURLINFO_HEADER_OUT, CURLINFO_HEADER_SIZE, CURLHEADER_SEPARATE, CURLHEADER_UNIFIED, CURLOPT_HEADEROPT, CURLOPT_PROXYHEADER
    -H
    --header &lt;header/@file&gt;
    Pass custom header(s) to server CURLOPT_HEADER, CURLOPT_HEADERFUNCTION, CURLOPT_HTTPHEADER, CURLOPT_WRITEHEADER, CURLINFO_HEADER_OUT, CURLINFO_HEADER_SIZE, CURLHEADER_SEPARATE, CURLHEADER_UNIFIED, CURLOPT_HEADEROPT, CURLOPT_PROXYHEADER
    --http2 Use HTTP 2 CURLOPT_HTTP200ALIASES, CURL_VERSION_HTTP2
    --ignore-content-length Ignore the size of the remote resource CURLOPT_IGNORE_CONTENT_LENGTH
    --interface &lt;name&gt; Use network INTERFACE (or address) CURLOPT_INTERFACE, CURLOPT_DNS_INTERFACE
    -6
    --ipv6
    Resolve names to IPv6 addresses CURL_VERSION_IPV6
    --key &lt;key&gt; Private key file name 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 &lt;level&gt; Enable Kerberos with security CURLOPT_KRB4LEVEL, CURLOPT_KRBLEVEL
    --local-port &lt;num/range&gt; Force use of RANGE for local port numbers CURLINFO_LOCAL_PORT
    -L
    --location
    Follow redirects CURLOPT_FOLLOWLOCATION
    --login-options &lt;options&gt; Server login options CURLOPT_LOGIN_OPTIONS
    --mail-auth &lt;address&gt; Originator address of the original email CURLOPT_MAIL_AUTH
    --mail-from &lt;address&gt; Mail from this address CURLOPT_MAIL_FROM
    --mail-rcpt &lt;address&gt; Mail to this address CURLOPT_MAIL_RCPT
    --negotiate Use HTTP Negotiate (SPNEGO) authentication CURLAUTH_GSSNEGOTIATE, CURLAUTH_NEGOTIATE
    -n
    --netrc
    Must read .netrc for user name and password CURLOPT_NETRC, CURL_NETRC_IGNORED, CURL_NETRC_OPTIONAL, CURL_NETRC_REQUIRED, CURLOPT_NETRC_FILE
    --netrc-file &lt;filename&gt; Specify FILE for netrc CURLOPT_NETRC_FILE
    --netrc-optional Use either .netrc or URL CURL_NETRC_OPTIONAL
    --noproxy &lt;no-proxy-list&gt; List of hosts which do not use proxy CURLOPT_NOPROXY
    --ntlm Use HTTP NTLM authentication CURLAUTH_NTLM, CURLAUTH_NTLM_WB
    --ntlm-wb Use HTTP NTLM authentication with winbind CURLAUTH_NTLM_WB
    --oauth2-bearer &lt;token&gt; OAuth 2 Bearer Token CURLOPT_XOAUTH2_BEARER
    --pass &lt;phrase&gt; Pass phrase for the private key 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
    --path-as-is Do not squash .. sequences in URL path CURLOPT_PATH_AS_IS
    --pinnedpubkey &lt;hashes&gt; FILE/HASHES Public key to verify peer against CURLE_SSL_PINNEDPUBKEYNOTMATCH
    --proto &lt;protocols&gt; Enable/disable PROTOCOLS 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
    --proxy-service-name &lt;name&gt; SPNEGO proxy service name CURLOPT_PROXY_SERVICE_NAME
    -p
    --proxytunnel
    Operate through an HTTP proxy tunnel (using CONNECT) CURLOPT_HTTPPROXYTUNNEL
    --pubkey &lt;key&gt; SSH Public key file name CURLE_SSL_PINNEDPUBKEYNOTMATCH
    -Q
    --quote
    Send command(s) to server before transfer CURLOPT_POSTQUOTE, CURLOPT_PREQUOTE, CURLOPT_QUOTE, CURLE_FTP_QUOTE_ERROR
    --random-file &lt;file&gt; File for reading random data from CURLOPT_RANDOM_FILE
    -r
    --range &lt;range&gt;
    Retrieve only the bytes within RANGE CURLOPT_RANGE, CURLE_HTTP_RANGE_ERROR, CURLOPT_LOCALPORTRANGE
    -e
    --referer &lt;URL&gt;
    Referrer URL CURLOPT_AUTOREFERER, CURLOPT_REFERER
    -X
    --request &lt;command&gt;
    Specify request command to use CURLOPT_CUSTOMREQUEST, CURLINFO_REQUEST_SIZE, CURLOPT_RTSP_REQUEST
    --resolve &lt;host:port:address[,address]...&gt; Resolve the host+port to this address CURLE_COULDNT_RESOLVE_HOST, CURLE_COULDNT_RESOLVE_PROXY, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4, CURL_IPRESOLVE_V6, CURL_IPRESOLVE_WHATEVER, CURLOPT_RESOLVE
    --retry &lt;num&gt; Retry request if transient problems occur CURLFTP_CREATE_DIR_RETRY
    --sasl-ir Enable initial response in SASL authentication CURLOPT_SASL_IR
    --service-name &lt;name&gt; SPNEGO service name CURLOPT_PROXY_SERVICE_NAME, CURLOPT_SERVICE_NAME
    --socks4 &lt;host[:port]&gt; SOCKS4 proxy on given host + port CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A
    --socks4a &lt;host[:port]&gt; SOCKS4a proxy on given host + port CURLPROXY_SOCKS4A
    --socks5 &lt;host[:port]&gt; SOCKS5 proxy on given host + port CURLPROXY_SOCKS5, CURLPROXY_SOCKS5_HOSTNAME, CURLOPT_SOCKS5_GSSAPI_NEC, CURLOPT_SOCKS5_GSSAPI_SERVICE
    --socks5-gssapi Enable GSS-API auth for SOCKS5 proxies CURLOPT_SOCKS5_GSSAPI_NEC, CURLOPT_SOCKS5_GSSAPI_SERVICE
    --socks5-gssapi-nec Compatibility with NEC SOCKS5 server CURLOPT_SOCKS5_GSSAPI_NEC
    --socks5-gssapi-service &lt;name&gt; SOCKS5 proxy service name for GSS-API CURLOPT_SOCKS5_GSSAPI_SERVICE
    --socks5-hostname &lt;host[:port]&gt; SOCKS5 proxy, pass host name to proxy CURLPROXY_SOCKS5_HOSTNAME
    -Y
    --speed-limit &lt;speed&gt;
    Stop transfers slower than this CURLOPT_LOW_SPEED_LIMIT
    -y
    --speed-time &lt;seconds&gt;
    Trigger 'speed-limit' abort after this time CURLOPT_LOW_SPEED_TIME
    --ssl Try 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
    Use SSLv2 CURL_SSLVERSION_SSLv2
    -3
    --sslv3
    Use SSLv3 CURL_SSLVERSION_SSLv3
    --stderr Where to redirect stderr CURLOPT_STDERR
    --tcp-fastopen Use TCP Fast Open CURLOPT_TCP_FASTOPEN
    --tcp-nodelay Use the TCP_NODELAY option CURLOPT_TCP_NODELAY
    -t
    --telnet-option &lt;opt=val&gt;
    Set telnet option CURLE_TELNET_OPTION_SYNTAX, CURLE_UNKNOWN_TELNET_OPTION
    --tftp-blksize &lt;value&gt; Set TFTP BLKSIZE option CURLOPT_TFTP_BLKSIZE
    --tftp-no-options Do not send any TFTP options CURLOPT_TFTP_NO_OPTIONS
    -1
    --tlsv1
    Use TLSv1.0 or greater CURL_SSLVERSION_TLSv1, CURL_SSLVERSION_TLSv1_0, CURL_SSLVERSION_TLSv1_1, CURL_SSLVERSION_TLSv1_2
    --unix-socket &lt;path&gt; Connect through this Unix domain socket CURLOPT_UNIX_SOCKET_PATH
    --url &lt;url&gt; URL to work with CURLOPT_URL
    -u
    --user &lt;user:password&gt;
    Server user and password 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
    --verbose
    Make the operation more talkative CURLOPT_VERBOSE
    -V
    --version
    Show version number and quit 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() 列表。

    【讨论】:

      【解决方案5】:

      试试这个:

      $cmd='curl -b cookie.txt -X PUT \
           --data-binary "@test.png" \
           -H "Content-Type: image/png" \    
           "http://hostname/@api/deki/pages/=TestPage/files/=test.png" \
           -0';
      exec($cmd,$result);
      

      【讨论】:

      • 我发布了一个这样的重复问题:stackoverflow.com/questions/38064372/curl-command-in-php。这个解决方案非常好,想知道如果我在 curl 命令中有一些 vars ,比如 curl -b $TEST -X PUT --data-binary $CHECK 等等。这还能用吗?
      • @PratikJaiswal 当然可以。但是你必须使用双引号而不是单引号。这意味着您已将代码中的开始和结束 ' 替换为 " 和 all of " 为 '
      • 某些服务器不是出于安全原因禁用了exec吗?
      【解决方案6】:

      为此添加了 --libcurl 选项,即使它是一个 C 程序,我认为它应该很容易转换为 PHP

      【讨论】:

        【解决方案7】:

        以 MYYN 的回答为起点,并以 this page 作为参考,了解如何使用 PHP cURL 发送 POST 数据,这是我的建议(我目前正在做一些非常相似的事情):

        <?php
        
        $pageurl = "http://hostname/@api/deki/pages/=TestPage/files/=";
        $filename = "test.png";
        
        $theurl = $pageurl.$filename;
        
        $ch = curl_init($theurl);
        curl_setopt($ch, CURLOPT_COOKIE, ...); // -b
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); // -X
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
        curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: image/png']); // -H
        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); // -0
        
        $post = array("$filename"=>"@$filename");
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
        $response = curl_exec($ch);
        ?>
        

        如果您愿意,您可以使用 curl_setopt_array() 调用优化许多 curl_setopts。

        【讨论】:

          【解决方案8】:

          这个更好。一行。

          $cmd='curl -b cookie.txt -X PUT --data-binary "@test.png" -H "Content-Type: image/png" "http://hostname/@api/deki/pages/=TestPage/files/=test.png" -0';
          exec($cmd,$result);
          

          【讨论】:

            猜你喜欢
            • 2019-06-04
            • 1970-01-01
            • 1970-01-01
            • 2017-01-01
            • 2014-08-28
            • 2012-05-10
            • 1970-01-01
            相关资源
            最近更新 更多