curl --verbose google.com
如果我执行此命令,在 curl 完成其工作后,它会显示“与主机 google.com 的连接 #0 保持完好”。
但如果我紧接着执行相同的命令,它不会使用相同的连接。如何让 curl 在第二个命令中重新使用相同的连接?
笔记:我不想在下面使用该命令,因为我必须在两个请求之间执行一些 bash 脚本操作:
curl --verbose google.com --next google.com
答案1
在谷歌上搜索时,我发现了一些有趣的答案和文章,这些答案和文章都与你的问题有关。主要是第二个答案https://stackoverflow.com/a/18047230/2901077不仅可以帮助您了解如何使用 libcurl 的端口重用,还可以帮助您了解何时使用它。
使用cURL_init用 PHP 实现的函数,用于打开连接,并且链接包括对其他两个函数(curl_setopt 和 curl_exec)的引用,以便能够潜在地重用现有句柄(连接)。
顺便提一下这个答案,https://stackoverflow.com/a/982556/2901077告诉您 cURL 如何处理新的或现有的请求。https://stackoverflow.com/a/15047105/2901077是这回答一下。
答案2
那么如何在第一个请求中保存 cookie,然后在第二个请求中重新使用它们呢?
这解决了我的问题。你可以使用
--dump-header mysession_cookies
或--cookie-jar
保存 cookies。第二种方法会将加载的 cookies(如果有)与收到的 cookies 进行合并。--cookie mysession_cookies
在下次请求时加载 cookies
请参阅此处了解更多详细信息讨论。因此,您使用的不是相同的 TCP 会话,但从 HTTP 的角度来看,它看起来像这样。
如果你想重用同一个会话 TCP 套接字来发送数据包,你需要一个特定的软件,如哈普罗西它充当混合器。也就是说,它接受你的请求并与服务器保持打开的连接。请参阅此讨论更多细节。