Articles of curl

在terminal使用curl“if”语句?

我正在使用这个命令来获取使用curl的页面的响应代码: curl -s -o /dev/null -w "%{http_code}" 'https://www.example.com' 如果响应代码是200 ,那么我想删除我的电脑上的某个文件。 如果不是200 ,就不应该做任何事情。 什么是最简单的方法来做到这一点?

如何使用curl将文件从一台服务器stream式传输到另一台(有限的服务器资源)

我的API服务器有一个非常有限的磁盘空间(500MB)和内存(1GB)。 它获得的API调用之一是接收文件。 消费者调用API并传递要下载的URL。 我的服务器的“目标”是将此file upload到Amazon S3。 不幸的是,我不能要求消费者直接将file upload到S3(部分要求)。 问题是,有时那些大文件(10GB),并将其保存到磁盘,然后将其上传到S3不是一个选项(500MB的磁盘空间限制)。 我的问题是,如何使用curl Linux程序将文件从inputurl“pipe道化”到S3? 注意:我可以用不同的方式pipe它,但是,它首先尝试下载整个文件并失败,或者出现内存错误和curl退出。 我的猜测是,下载比上传快得多,所以当我得到10GB的文件时,pipe道缓冲区/内存增长并爆炸(服务器上的1GB内存)。 有没有办法实现我正在尝试使用curl和pipe道? 谢谢,杰克

发生错误时如何自动重新运行“curl”命令

有时当我用curl命令执行一个bash脚本来将一些file upload到我的ftp服务器时,它会返回一些错误,如: 56 response reading failed 我必须find错误的行并手动重新运行它们。 我想知道是否可以在错误发生时自动重新运行。 我的脚本是这样的: #there are some files(A,B,C,D,E) in my to_upload directory, # which I'm trying to upload to my ftp server with curl command for files in `ls` ; do curl -T $files ftp.myserver.com –user ID:pw ; done 但是有时候A,B,C会被成功上传,只有D被留下了“错误56”,所以我不得不手动重新运行curl命令。 此外,正如威尔·比克福德所说,我更喜欢不需要确认,因为在脚本运行的时候,我总是睡着了。 🙂

curl“写出”特定标题的值

我目前正在写一个bash脚本,我正在使用curl。 我想要做的是获得一个特定的响应头。 基本上我想要这个命令的工作: curl -I -w "%{etag}" "server/some/resource" 不幸的是,-w,–write-out选项似乎只有一组支持的variables,不能打印任何属于响应的头部。 我是否需要自己分析curl输出以获取ETag值,还是有办法让curl打印特定头文件的值? 显然有点像 curl -sSI "server/some/resource" | grep 'ETag:' | sed -r 's/.*"(.*)".*/\1/' 做的伎俩,但它会更好,有curl过滤标题。

如何编译在Windows源代码curl?

我在这个答案下build议了这个问题

使用curl 7.33.0的–http2.0选项提供不受支持的协议

我使用的是centos 6.2,我需要在服务器请求中使用curl —http2.0,但是在看了http://curl.haxx.se/docs/manpage.html给出的7.19.6后我说–http2.0选项只支持curl 7.33.0,所以为了克服这个问题,我已经安装curl 7.33.0按照http://www.linuxfromscratch.org/blfs/view/svn /basicnet/curl.html安装curl后,我试图使用,但它仍然给我的错误作为curl(1):不支持的协议 ,我检查了我的curl版本使用: curl –version这是给我 : curl 7.33.0 (x86_64-unknown-linux-gnu) libcurl/7.33.0 OpenSSL/1.0.0 zlib/1.2.3 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz 我需要使用这个–http2.0,但没有得到任何事情,我怎么能做到这一点? 由于curl7.19被安装,并且我重新安装更高版本的curl,这是否有任何问题?

linux curl另存为utf-8

尝试使用Linuxcurl从URL下载XML文件。 很确定这个xml是用UTF-8编码的, 怀疑curl -o不保存为UTF-8。 无论如何强制保存为UTF-8curl? 感谢您的build议,我发现: 由于XML feed是dynamic的,并不是所有的时候都包含任何utf-8字符。 有时即使它在xml编码和标题内容types中设置为utf-8,它在整个内容中也没有utf-8字符:charset = utf-8。 当它至less包含一个utf-8字符时,它将被保存为utf-8。 当发生这种情况时,curl不会以utf-8的forms下载,因为没有utf-8字符,这是有道理的,为什么需要存储为utf-8。 这是非常棘手的,一些validation器必须对utf-8有效,因此我仍然需要一个解决scheme来强制它为utf8,因为默认情况下,我所有的xml shld都是utf8编码。 尝试build议通过使用iconv f iso8859-1 utf-8不适用于这种情况下,因为我怀疑它不在iso8859-1也不是。 仍然需要更好的解决scheme。

用于https(SSL)的Curl命令

我想运行下面的CURL命令,但我得到一个SSL证书错误: curl https://example.com:8443/cli/agentCLI -u username:password 错误: curl:(60)SSL证书问题,请validationCA证书是否正确。 详细信息:错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书validation失败更多详细信息,请访问: http ://curl.haxx.se/docs/sslcerts.html curl默认使用证书颁发机构(CA)公钥(CA证书)的“包”来执行SSL证书validation。 默认包名为curl-ca-bundle.crt; 您可以使用–cacert选项指定备用文件。 如果此HTTPS服务器使用包中表示的由CA签名的证书,则证书validation可能由于证书问题(可能已过期,或名称可能与URL中的域名不匹配)而失败。 如果您想closures卷发的证书validation,请使用-k(或–insecure)选项。 我将如何解决这个问题,以允许SSL URL?

具有multithreadingcurl请求的Segfault

我在这里遇到了一些C ++程序的麻烦。 基本上我已经为http请求写了一个简单的包装,可以一次执行多个请求。 工作绝对好,但是当我做httpS请求时,它在multithreading模式下随机崩溃。 我使用curl和posix线程。 Backtrace看起来像这样: ======= Backtrace: ========= /lib/x86_64-linux-gnu/libc.so.6(+0x80996)[0x7fea9046d996] /lib/x86_64-linux-gnu/libc.so.6(+0x82b80)[0x7fea9046fb80] /lib/x86_64-linux-gnu/libc.so.6(realloc+0xf2)[0x7fea90470ae2] /lib/x86_64-linux-gnu/libcrypto.so.1.0.0(CRYPTO_realloc+0x49)[0x7fea8f9c6169] /lib/x86_64-linux-gnu/libcrypto.so.1.0.0(lh_insert+0x101)[0x7fea8fa4bfb1] /lib/x86_64-linux-gnu/libcrypto.so.1.0.0(+0xe844e)[0x7fea8fa4e44e] /lib/x86_64-linux-gnu/libcrypto.so.1.0.0(ERR_get_state+0xde)[0x7fea8fa4eeee] /lib/x86_64-linux-gnu/libcrypto.so.1.0.0(ERR_clear_error+0x15)[0x7fea8fa4f065] /usr/lib/x86_64-linux-gnu/libcurl.so.4(+0x24e79)[0x7fea90f10e79] /usr/lib/x86_64-linux-gnu/libcurl.so.4(+0x39ea0)[0x7fea90f25ea0] /usr/lib/x86_64-linux-gnu/libcurl.so.4(+0xf8fd)[0x7fea90efb8fd] /usr/lib/x86_64-linux-gnu/libcurl.so.4(+0x219f5)[0x7fea90f0d9f5] /usr/lib/x86_64-linux-gnu/libcurl.so.4(+0x35538)[0x7fea90f21538] /usr/lib/x86_64-linux-gnu/libcurl.so.4(curl_multi_perform+0x91)[0x7fea90f21d31] /usr/lib/x86_64-linux-gnu/libcurl.so.4(curl_easy_perform+0x107)[0x7fea90f19457] ./exbot[0x40273a] /lib/x86_64-linux-gnu/libpthread.so.0(+0x7f6e)[0x7fea90cd6f6e] /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d)[0x7fea904e79cd] 这可能是libcrypto中的一个错误? 我可以不知何故告诉curl不要使用libcrypto? 任何替代品? 它只使用httpS请求来启动文件,并且即使10000个同时http查询也能正常工作。 干杯,托马斯 只是为了完整我的代码: // simple wrapper for http requests #ifndef _REQUEST_H_ #define _REQUEST_H_ #include <curl/curl.h> #include <pthread.h> #include <string> #include <iostream> ////////////////////////////////// // MACROS ////////////////////////////////// […]

卷起多部分/表单数据和JSON

有没有办法使用curl做一个multipart/form-data文章,并指定数据是application/json ? 它不一定是curl。