带代理的 PHP CURL 导致套接字上的 CLOSE_WAIT

2024-04-29

我正在使用 PHPcurl 库来建立连接并从 WEB 检索内容 - 通常。

我有多个 SOCKS5 代理服务器在 localhost 上运行,端口从 10300 到 10350,PHP 随机选择一个端口。

My code:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_PROXY, "localhost:".mt_rand(10300, 10350));
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$curl_resp = curl_exec($ch);
curl_close($ch);
/// ... whatever logic

但是,如果我将此代码长时间放入循环中,则会收到错误消息,提示无法打开更多文件。我在网上读到这是因为达到了文件处理程序限制,所以我用lsof -p我注意到该过程有数百甚至数千行:

... TCP localhost:43030->localhost:10303 (CLOSE_WAIT)
... TCP localhost:40982->localhost:10341 (CLOSE_WAIT)
... TCP localhost:48718->localhost:10304 (CLOSE_WAIT)
... TCP localhost:41655->localhost:10350 (CLOSE_WAIT)
... TCP localhost:41915->localhost:10310 (CLOSE_WAIT)
... TCP localhost:49746->localhost:10322 (ESTABLISHED)

我正在研究为什么会这样,但我不明白,因为我正在打电话curl_close我假设 CURL 也会关闭 PROXY 连接,或者我错过了什么?

版本:

PHP 7.1.4-1+deb.sury.org~trusty+1 (cli) (built: Apr 11 2017 22:45:20) (NTS)
curl 7.52.1 (x86_64-pc-linux-gnu) libcurl/7.52.1 OpenSSL/1.0.1f zlib/1.2.8 libidn2/0.9 libpsl/0.11.0 (+libicu/52.1) libssh2/1.4.3 nghttp2/1.19.0 librtmp/2.3

我也遇到过这个问题。解决方法是添加

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Connection: close"));

起初我认为这与 php7 有关,因为我可以在 php7 盒子上重现它,但在 php5 上,它不会发生。不幸的是,我在另一个 php7 盒子上尝试了这个,它也没有再次发生。所以我仍然对根本原因感到困惑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带代理的 PHP CURL 导致套接字上的 CLOSE_WAIT 的相关文章

  • 如何在 PHP MYSQL 中将数据库表和每条记录从一台数据库服务器复制到另一台数据库服务器?>

    您好 我编写了一段代码 可以将数据库表从一个服务器复制到另一个服务器 但是每个表的记录没有复制 如何编写一个可以将表和每个记录从一个数据库服务器复制到另一个数据库服务器的函数 这是我的示例代码
  • DateTime::修改和夏令时切换

    Using 日期时间 修改 http php net manual en datetime modify php在 DST 边界上添加一个小时会导致它跳过一个小时 e g d new DateTime 2015 11 01 12 00 00
  • 从 Yii2 中的联结表检索数据

    我试图从 Yii2 中的连接表获取数据无需额外查询 我有 2 个模型 用户 组 通过连接表 user group 关联 在 user group 表中 我想存储此关系的额外数据 管理标志 将数据添加到连接表的最佳方法是什么 link 方法接
  • 如何在php中正确显示另一种语言的mysql表数据

    我有一个 mySQL 表 其中一列中的数据采用英语以外的语言 波斯语 当我在表中输入数据时 它会正确显示 但是当我想在 php 文件中显示数据时 它会显示如下 好吧 我应该怎么做才能以正确的形式显示数据 由于我经常使用 非英语 字符 因此要
  • 需要使用 imap php 保存电子邮件副本,然后可以在 Outlook Express 中打开

    我有 IMAP PHP 脚本 它连接并读取邮箱中的电子邮件 我正在寻找的是 我想将电子邮件保存在服务器磁盘上 并将其命名为 testing eml 文件 因此 当我稍后记下这些电子邮件时 可以在 Outlook Express 中查看 任何
  • Google 应用程序引擎 - 上传的文件在谷歌云存储上不公开

    我有一个允许用户上传图像的应用程序 并且我希望其他用户能够看到该图像 我使用 CloudStorageTools createUploadUrl 方法允许用户通过 POST 上传 然后 我将上传的文件并使用 move uploaded fi
  • mysqli::real_connect 和 new mysqli 对象在连接数据库方面有什么区别?

    我正在使用这种方法连接到mysql db this gt Con new mysqli this gt DB Server this gt DB User this gt DB Pass this gt DB DB 当我使用这种方法连接时有
  • ZipArchives 存储绝对路径

    我可以使用相对路径压缩文件吗 例如 zip gt addFile c wamp www foo file txt ZIP 应该具有如下目录结构 foo gt file txt and not wamp gt www gt foo gt fi
  • PHPMailer:如何将 Content-Type 设置为 multipart/alternative

    我正在使用 phpmailer 发送电子邮件 但消息的标题中带有 Content Type text html 我怎样才能将其更改为多部分 替代 它应该类似于 mail gt 我的配置是 mail new PHPMailer mail gt
  • Guzzle 中的“并发”到底是什么?

    我没有找到太多关于concurrency选项中Pool 如果这是可以在服务器上打开的 TCP 套接字数量 那么问题是 我可以使用多少并发来更快地处理请求 我有这个使用的例子Pool I am using Laravel this is ba
  • 不使用 PHP 提交联系表单

    我还是一名学生 今天我们的讲师告诉我们 无需使用 mailto 函数即可提交联系我们表单的唯一方法是使用 PHP 我发誓去年另一位讲师向我们展示了一种仅使用 javascript 的方法 是否可以使用基本表单和 javascript 提交反
  • 将 PHP 7 安装到我的服务器后,PHP 模块无法加载

    我将 PHP 7 安装到我的服务器上 因此 我没有 etc php5 和 etc php 7 0 当我运行我的网络应用程序时 我看不到任何以前的 CURL 或 fork 起初我收到这个错误消息 消息 调用未定义的函数curl init 安装
  • 在 wampserver 2.2 上安装 php_imagick.dll PHP 扩展

    我使用的是 32 位操作系统的 Windows 7 我安装了 ImageMagick 6 8 7 Q16Link https www imagemagick org script download php windows我能够从命令行 转换
  • jquery ajax加载后丢失CSS

    大家知道如何解决 load Ajax 请求后的 css 问题吗 例如 如果我想从网页加载 DIV 在我的 Ajax 请求之后 container load path to div div id 我丢失了与该 div 关联的所有 css 和脚
  • Php 转换 GMT 格式的时间

    我有这个字符串2012 06 27 16 17 06我想将其转换为 GMT 格式 我怎样才能做到这一点 多谢 Use gmdate http php net manual en function gmdate php 使用以下命令将当前日期
  • 如何从 PHP 中的字符串创建可能的字符串组合?

    如何从 PHP 中的字符串创建可能的字符串组合 Exp input abc output array 0 gt a 1 gt ab 2 gt abc 3 gt ac 4 gt acb 5 gt b 6 gt ba 7 gt bac 8 gt
  • 我的设置未保存在 WordPress 主题选项页面中

    我正在尝试创建一个基于 WordPress 设置 API 的主题选项页面 当我在浏览器中检查 options php 页面时 例如http mysite com wordpress wp admin options php http mys
  • 从远程托管上的 PHP 获取 PHP 错误日志

    是否有 PHP 函数或其他方式以字符串形式获取 PHP 错误日志 我需要这个 因为我无法访问在其他人的服务器上运行的站点的错误日志 他提出通过电子邮件将错误日志发送给我 但这不太方便 有什么方法可以将错误日志输出到 PHP 页面吗 我意识到
  • 如何查找连接到 AF_INET 套接字的客户端的 UID?

    有什么方法或类似的东西ucred for AF UNIX如果是AF INET插座 TCP在我的例子中 找出连接到我的套接字的客户端的UID 还有 proc net tcp但它显示了UID of the creator插座的而不是连接的cli
  • 间歇性 PHP 抽象类错误

    我已经为此奋斗了一段时间 但无法弄清楚 也许其他人也有 或者 Slim PHP Apache 等这里有更深层次的问题 在正常工作几个小时后 我的 Slim 安装将开始给出所有路线均如此 致命错误 类 Slim Collection 包含 1

随机推荐

  • 重用 CloudBlobClient 对象

    我有这两个对象用于 Azure Blob 存储访问 并希望在 ASP NET MVC 应用程序中使用它们 CloudBlobClient blobClient storageAccount CreateCloudBlobClient Clo
  • jQuery Masonry 和媒体查询 - 重新加载 masonry

    我的网站设计有媒体查询 以覆盖不同大小的布局 我有砌体组织一堆全尺寸宽度的浮标 没问题 在移动宽度下 所有浮子都会浮起并堆叠在一起 所以我只需要在网站大小调整为平板电脑布局且 768px
  • Struts 2 S2-016 漏洞缓解直至升级

    最近 Struts 修复了一个允许攻击者执行远程代码的漏洞 显然 不修补这个问题就像用潮流欢迎黑帽子一样 http struts apache org release 2 3 x docs s2 016 html http struts a
  • R 中自定义函数的自动创建和使用

    我想在 for 循环中创建评估不同的索引 这些指数有不同的公式 并不总是需要评估 f i 我要评估的指数可能是 a 1 b 2 c 5 d 8 IDX1 function a b result a b IDX2 function c b r
  • 故事板放大/缩小键盘快捷键

    Xcode 中可以使用什么快捷键组合来放大和缩小 是的 我知道这是一个愚蠢的问题 但谷歌搜索没有给我任何结果 甚至 Xcode 键盘快捷键也没有给我太多信息 也许我必须要求为 Xcode 4 5 提供更好的更新键盘快捷键文档 你也可以用鼠标
  • 流星和陨石(mrt)有什么区别?

    例如 有些网站告诉我使用mrt add accounts ui 使用陨石 对吧 其他人说meteor add accounts ui 据我了解 陨石 https github com oortcloud meteorite只是一个版本控制
  • “key”是MySqli中的保留字吗?我收到错误

    我刚刚真正接触 MySql MySqli 并且正在使用准备好的语句 除了这一行之外 我的整个脚本运行良好 if stmt con gt prepare SELECT bandHash userHash userPassHash type F
  • WinForms 与 mshtml 和 ie9 的问题

    IE9 似乎破坏了我的 32 位 winforms net 3 5 应用程序中基于 mshtml com 的 WebBrower html 编辑器 由于我必须使用 activex USB 设备控制器 它必须设置为 32 位 该错误不稳定 它
  • Python 中使用 RegEx 的函数解析器

    我有一个 Fortran 源代码 几乎不相关 我想解析函数名称和参数 例如使用 w with a b 1 2 2 c 3 4 我得到以下信息 如预期 b 1 2 2 c 3 4 我需要的地方 a b 1 2 2 c 3 4 b 1 2 2
  • 类验证器不验证数组

    我无法让类验证器工作 看起来我没有使用它 一切都像我没有使用类验证器一样工作 当发送正文格式不正确的请求时 我没有任何验证错误 尽管我应该这样做 My DTO import IsInt Min Max from class validato
  • Docker 与 nginx 组合不断显示欢迎页面

    我是新来的docker并尝试使用最简单的 docker compose yml 显示一个 hello world 页面 并在此基础上构建最终完整的LEMP堆栈它将与我的服务器具有相同的配置 然而大多数教程已经过时 并且有很多使用方法dock
  • 命名空间“System”中不存在类型或命名空间名称“Serialized”(您是否缺少程序集引用?

    I am VS 2012 silverlight 5 beginner I tried to serialize and de serialize from a xml file I have following error while d
  • java有索引的最小优先级队列吗?

    我需要它来实现 Dijkstra 算法 并且我确实有自己的实现 但是使用 java 自己的类记录我的代码会更容易 不 Java标准库没有这样的数据结构 我想大多数人都用这个 http algs4 cs princeton edu 24pq
  • AOP 使用 around 来避免执行方法

    我在代码中使用 Spring AOP 来拦截某个方法的执行 我正在尝试做的一个简化示例如下 public void someMethod does something Around execution someMethod public v
  • jqGrid 的排序/过滤问题

    我正在使用jqGrid 4 5 3 版本我已经升级到免费 jqGrid 版本 4 13 6 升级后我面临以下问题 排序不适用于所有列 我想根据我设置的内容显示列大小autoResizable true and autoresizeOnLoa
  • 在 Zend Framework 应用程序中,/views/filters 有什么用途?

    我知道视图助手的作用 view helpers 但我不知道视图过滤器 view filters 是什么 或者它的用途是什么 有人可以解释一下这个问题吗 谢谢你 在渲染视图结束时 Zend View 将输出传递给您已注册的任何过滤器 方法是调
  • 无法在 Spark 中读取具有自定义一元转换器的管道模型

    我在 Spark 中定义了一个新的自定义 UnaryTransformer 示例代码中的 cleanText 并在 Pipeline 中使用它 当我保存安装的管道并尝试读回它时 出现以下错误 java lang NoSuchMethodEx
  • 将两个 HTML 文档嵌入到一页中

    我想输出两个 HTML 文档 包裹在一个 HTML 文档中 是否可以用 HTML 来做这样的事情 First page here Second page here
  • android:检查应用程序中文件是否存在

    我的应用程序的资产文件夹中有几个 html 文件 我的应用程序根据设备语言加载这些文件 当我检查文件是否存在时 它说不存在 但是当我使用 browser loadUrl filename 加载该文件时 它加载得很好 以下代码将帮助您理解我的
  • 带代理的 PHP CURL 导致套接字上的 CLOSE_WAIT

    我正在使用 PHPcurl 库来建立连接并从 WEB 检索内容 通常 我有多个 SOCKS5 代理服务器在 localhost 上运行 端口从 10300 到 10350 PHP 随机选择一个端口 My code ch curl init