一些有用的卷曲片段
Curl是一个非常有用的工具,它具有适用于各种情况的各种标志和选项。我倾向于将curl用于各种类型的东西,而不仅仅是下载大文件。所以我想我会发布一些我使用该工具最常见的事情。请注意,以下大多数URL并不真正存在,它们仅用于演示目的。我还省略了这些命令的输出,因为它们从几行到多页输出不等。
要向网站运行基本的curl请求,请打开终端并运行以下命令。
curlhttp://www.example.com/
这只会将页面内容拆分为命令输出。您可以在URL周围使用引号,但通常不需要这样做,除非您有一个会破坏外壳的字符。例如,所有包含&符号的URL都应该用引号括起来。
curl"http://www.example.com?parameter1=1&meter2=1"
您可以运行标头请求,该请求仅使用-I(大写i)标志从请求中返回标头。
curl-Ihttp://www.example.com/
要获取标题和内容,请使用-i(小写i)标志。
curl-ihttp://www.example.com/
如果您想通过基本身份验证进行卷曲,那么您可以使用-u标志包含用户详细信息。
curl-uusername:passwordhttp://www.example.com/
要向请求附加一个或多个标头,请使用-H标志。下面将用户代理设置为“Mozilla/5.0”。
curl-i-H"User-Agent:Mozilla/5.0"http://www.example.com/
您可以通过多次提供-H标志来提供多个标头。
curl-i-H"User-Agent:Mozilla/5.0"-H"Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"http://www.example.com/
如果你想开始搞乱HTTP动词,你可以用-X标志设置它。到目前为止,我们所做的每个请求都是一个GET请求,这可以通过以下方式手动设置。
curl-i-XGEThttp://www.example.com/
此标志允许您开始测试RESTful服务。例如,如果您想向服务发送删除项目的请求,您可以使用DELETEHTTP动词发送请求,如下所示。
curl-i-XDELETE"http://www.example.com/service?id=123"
要发送POST请求(或包含一些数据有效负载的请求),您可以使用-X、-H和-d标志。下面的示例发送一个带有JSON数据的POST请求,但也告诉Web服务器它应该期望JSON数据作为有效负载。
curl-i-XPOST-H"Content-Type:application/json;charset=UTF-8"-d'{"id":"123","name":"bob"}'"http://www.example.com/service?id=123"
丢失JSON数据后,这会很快变得混乱,但可以将数据放入文件并从curl命令引用它。以下示例从名为“data.json”的文件中提取POST负载并将其与请求一起发送。
curl-i-XPOST-H"Content-Type:application/json;charset=UTF-8"-d@data.json"http://www.example.com/service?id=123"
这种语法(称为@readFile宏)也是将文件作为POST数据发送的好方法。这可以使用-F标志来完成。您还应该在此实例中包含正确的“Content-Type:multipart/form-data”标头。
curl-i-XPOST-H"Content-Type:multipart/form-data"-F"[email protected]"http://www.example.com/upload.php
如果您只想查看请求返回的标头,则不能将-I标志与-X标志结合使用,因为它们会相互干扰。您可以通过同时使用-D、-o和-s标志来解决此问题。-D(或--dump-header)标志会将头文件转储到指定位置,在本例中我们使用-这意味着我们希望将头文件转储到命令行。-D标志本身仍然会返回页面输出,所以我们使用-o标志将页面的输出转储到/dev/null(即只是把它扔掉)。最后,当使用-o标志将页面内容转储到文件时curl将输出一个进度条,因此我们包含-s标志以抑制此进度条。
curl-s-D--o/dev/null"http://www.example.local/"
您可以将-s和-D标志组合在一起以稍微简化事情。
curl-sD--o/dev/nullhttps://www.example.com/
测试标头(以及跟随重定向)的另一种方法是同时使用一组标志来拼写-sSLIXGET。-s标志将使curl静音,-S标志将显示产生的任何错误(如果失败),-L标志允许curl查找和跟踪重定向。-I标志告诉curl仅获取标头,但添加-X标志意味着我们将发出GET请求而不是HEAD请求。我在测试重定向时经常使用它,因为它往往工作得很好并且(相当)容易记住。
curl-sSLIXGEThttp://www.hashbangcode.com
如果您使用的是自签名SSL证书,则curl将拒绝该请求。为了绕过这一点,您需要提供--insecure标志。
curl-i--insecurehttp://www.example.com/
您还可以使用--resolve标志向没有DNS条目的服务器发送请求。这是curl的最新添加,因此您的系统上可能不存在此标志。--resolve标志必须包含具有以下详细信息的字符串:
[DNSaddress]:[port]:[IPaddress]
因此,要将请求重定向example.com到本地IP地址,您需要执行以下操作。
curl-ihttp://www.example.com/--resolve'www.example.com:80:192.168.100.124'
使用--resolve的另一种语法是使用原始IP地址并发送带有-H标志的Host标头。
curl-i-H"Host:www.example.local"192.168.100.124
要捕获curl请求的输出,您可以提供-o(小写字母O)标志,提供要创建/更新的文件名。
curl-ihttp://www.example.com/-ooutput.txt
或者,您可以使用-O(大写字母O)标志将URL中的文件名用作输出文件的文件名。
curl-ihttp://www.example.com/robots.txt-O
您可以将此标志与-u标志一起使用以从FTP服务器下载文件。
curl-uusername:password-Oftp://www.example.com/file.txt
您有时会发现页面已移动,在这种情况下,它们会发出300标题。要让curl遵循这些重定向,请使用-L标志。一个很好的例子就是如果您尝试访问Google。该站点通常会将您重定向到该站点的本地版本,但它会确保URL前面有“www”。
curl-I-Lhttp://google.com/
如果您使用curl下载文件并且不能保证一次性下载该文件,那么您可以使用-C-标志。这允许curl从下载中断时停止的位置继续。
curl-C--O"http://www.example.com/bigfile.zip"
当curl下载大文件时,您可以使用curl生成进度条,而不是使用-#标志读取通常的统计信息。
curl-#-C--O"http://www.example.com/bigfile.zip"
如果您想详细查看您的请求,您可以使用-v标志让curl打印出所有内容。
curl-vhttp://www.example.com/
通过使用--trace标志,您可以获得比这更多的细节。此标志将文件作为参数,并将所有传入和传出数据的跟踪转储放入该文件中。这里有很多数据,但它可以帮助追踪某些问题,如编码错误。
curl--tracetrace.txt"http://www.example.com/"
最后,一件有用的事情是向PHP应用程序发出命令并触发Xdebug以启动调试器。这可以通过使用-b标志将名为XDEBUG_SESSION的cookie发送到服务器来完成,该cookie的值将触发您的IDE启动Xdebug进程。我使用PHPStorm,因此我的价值是PHPSTORM,但您的价值在这里可能有所不同。这种方法在测试POST请求时特别有用,尤其是在像SOAP这样的网络服务上使用时。
curl-ihttp://www.example.com/-bXDEBUG_SESSION=PHPSTORM
我在这里遗漏了什么有用的curl命令?在下面发布您最喜欢的curl片段。