问题标签 [curl-multi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1226 浏览

php - PHP cURL 多处理导致服务器之间的随机连接问题?

我有一个网站,可以跟踪在线游戏中单个玩家的数据。每天同时运行一个 cron,它使用 cURL 从游戏公司的服务器获取每个玩家的数据(每个玩家需要自己的页面来获取)。以前我遍历每个玩家,一次创建他们自己的 cURL 请求并存储数据 - 虽然这是一个缓慢的过程,但几周内一切正常(每天处理 500-1,000 名玩家)。

随着我们获得更多玩家,cron 开始运行时间过长,所以我在大约一周前使用ParallelCurl (cURL 多处理)重写了它。它被设置为一次打开不超过 10 个连接并且运行良好 - 在 3-4 分钟内完成大约 3,000 个页面。直到一两天后我才发现有任何问题,我随机无法连接到他们的服务器(返回 0 的 http 代码)。我以为我被永久禁止/阻止了,直到大约 1-2 小时后我才能突然再次连接。该块发生在 cron 运行一天后的几个小时 - 当时发出的唯一请求是偶尔的单个文件请求(这些请求一直运行良好并且几个月没有受到影响)。

这几天都是这样。Cron 运行良好,然后一段时间后(几个小时)我一两个小时都无法连接。今天我将 cron 更新为一次只打开 5 个连接 - 一切正常,直到 5-6 小时后我无法连接 2 小时。

我做了很多谷歌搜索,似乎找不到任何有用的东西。我猜想可能是防火墙阻止了我的连接,但是当涉及到这样的事情时,我真的很困惑。我真的不知道发生了什么,以及我需要做些什么来解决它。如果有任何帮助,我将不胜感激——即使是猜测或正确的方向。

请注意,我使用的是共享网络主机 (HostGator)。两天前我提交了一张票并在他们的论坛上发了一个帖子,我也给公司发了一封电子邮件,但还没有看到任何回复。

- 编辑 -

这是我使用 parallelcurl 运行多个请求的代码。包含保持不变,与此处显示的相同

这是我用来简单查看是否可以连接的代码

当我无法连接时运行它会导致:

0 投票
1 回答
432 浏览

php - php cUrl 多个请求 - 获取所有内容

我正在使用以下脚本从多个 url 获取内容,但无需任何修改,它将永远运行:https ://raw.github.com/jmathai/php-multi-curl/master/EpiCurl.php

我正在尝试并行获取多个 url 的内容。它旨在始终获得结果。

问题:为什么这个脚本永远运行并且没有按预期在一段时间后终止?

0 投票
2 回答
1202 浏览

php - 识别特定的 curl 多响应

我曾经curl_multi_exec()同时请求多个网站。说,URL1URL2URL3。只要其中一个网站返回结果,我就可以对其进行处理,然后等待下一个响应。

现在我需要知道,根据请求的响应,这个结果来自哪个 URL。我不能简单地从响应中检查 URL,因为可能存在重定向。那么识别响应来自哪个 URL(、、或)的最佳方法是URL1什么URL2URL3信息可以来自curl_multi_info_read()curl_getinfo()以某种方式用于此目的吗?是否有我可以设置和请求的 cURL 选项?

我还尝试在请求 URL 之前存储 cURL 处理程序并将它们与它们进行比较,curl_multi_info_read($curlMultiHandle)['handle']但由于这是一种资源,因此无法真正进行比较。

有任何想法吗?

0 投票
1 回答
2876 浏览

php - curl_multi is very slow to check 100 of urls

I'm using following code to check broken links in the given url. but this process is very slow. i need to speed up this process quickly.

} while ($mrc == CURLM_CALL_MULTI_PERFORM);

// 4. main loop while ($active && $mrc == CURLM_OK) {

}

// 14. finished curl_multi_close($mh);

0 投票
2 回答
1697 浏览

php - 用php快速发送大量API请求?

我希望尽快进行一堆 REST api 调用。我目前有大约 1,000 个请求要提出。

任何处理或类似的事情都不需要这些调用的结果。我只需要将它们全部发布到 api url。

我当然在我的循环中尝试过,这非常慢。我也尝试过使用 curl_multi_exec ,但这也很慢。这是那个代码。

关于如何快速做到这一点的任何想法。在没有 curl 代码的情况下,我的其余代码只需要一秒钟左右即可完成。

0 投票
0 回答
1470 浏览

php - curl multi陷入无限循环

我正在尝试做curl_muliti_*,但我遇到了问题,我不知道是什么导致了问题。当我运行以下代码时,我在这里陷入了无限循环while($active && $mrc === CURLM_OK){

在循环中(在 if 上方)我添加var_dump(curl_multi_select($mh))并输出它int(-1)为什么这样做?

这是完整的方法:

注意:让我知道您可能需要哪些其他代码。

0 投票
1 回答
843 浏览

php - 使用 curl_multi_getcontent() 时如何最小化 PHP Spider 的内存消耗?

我希望有人可以帮助我解决这个问题。我目前正在用 PHP 编写一个蜘蛛函数,它递归地爬过一个网站(通过它在网站页面上找到的链接)直到预先指定的深度。

到目前为止,我的蜘蛛最多可以在 2 个深度级别上工作。我的问题是当深度下降 3 级或更多级别时,尤其是在较大的网站上。我遇到了一个致命的内存错误,我认为这与使用 cURL 的所有递归多处理有关(而且因为某些站点上的 3 级下降可能意味着要处理数千个 URL)。

致命错误:第 105 行 C:\xampp\htdocs\crawler.php 中允许的内存大小为 134217728 字节已用尽(试图分配 366030 字节)

我的问题是关于我可能做错了什么(或者我应该做什么)以尽量减少内存消耗。

这是代码当前的样子,与内存使用相关的重要区域保持不变,更复杂的处理部分替换为伪代码/注释(以使其更易于阅读)。谢谢!

0 投票
0 回答
1753 浏览

php - 如何在 curl_multi 模式下捕获 curl_errno?

出于某种原因,curl_errno($value)总是返回0而不是6当我尝试 url 之类的stkovrflow.com. 这是一个不存在的域。所以 curl 应该返回6。但我得到了0

有人可以告诉我我的代码有什么问题吗?

这就是我检查 curl 错误的方式

这是我的完整代码

更新:

看起来 curl_errno在 curl 多模式下不起作用(请参阅错误报告)。相反,我们应该使用curl_multi_info_read。当我像这样使用curl_multi_info_read

这是我的 var_dump 输出。

你可以正确返回 6 。但是php doc说

返回的资源指向的数据将无法在调用 curl_multi_remove_handle() 后继续存在。

不幸的是,我的脚本依赖于 curl_multi_remove_handle()。有什么解决办法吗?

=======

0 投票
2 回答
465 浏览

php - PHP:以真正异步的方式进行 http GET/POST

基本上,我正在寻找一种在 PHP 中执行以下操作的方法:

也许有更多 curl 经验的人可以确认 curl_multi 是我正在寻找的。

根据我从http://php.net/manual/en/function.curl-multi-init.php收集的信息,那里的样本可能会给我我需要的东西:

现在,主要问题是,我对这样做的理解是否正确?

1)第一个循环只负责向套接字发送/写入请求。

2)所有的http / socket的东西都将在请求发送后发生在后台,让我可以自由地做其他事情,而不必定期调用curl_multi_exec来确保某个缓冲区没有满的地方需要一个踢来保持去。

3) 第二个循环将等待任何未完成的响应数据到达并完成读取和处理响应。

现在,这仍然不是完全异步的——如果套接字写入缓冲区填满,我可能会在写入请求时被阻塞,但在我的场景中这不是问题,我只担心在我做的时候必须调用 curl_multi_exec中间的其他东西,这样整个事情就不会冻结,直到我下次有机会调用 curl_multi_exec。

对于 2k-4k 响应的一般情况,我也很好,在我进入第二个循环之前,更大的响应会卡在后台什么都不做。

这是 curl_multi 的工作原理吗?如果没有,你能建议什么用 PHP 来完成?

0 投票
0 回答
147 浏览

php - 为什么一个 php 脚本按顺序运行比单独运行慢?

我遇到了一个奇怪的问题,希望有人可以帮助我。我用 PHP 编写了一个 multiCurl 蜘蛛,它可以从网站上刮掉关键词,但我遇到了一个奇怪的性能问题。

当我运行蜘蛛来抓取网站的前几级时,大约需要 2 分钟才能完成,这对我来说不是什么大问题。奇怪的是,当我尝试在同一个脚本中一个接一个地运行一个蜘蛛时,运行时由于某种原因而膨胀。例如,当我希望它在 7 个站点上按顺序运行时,我希望它需要 14 分钟(每个站点 2 分钟),但运行时间却超过 45 分钟。我已经分别测试了每个站点,实际上它们平均每个站点都在 2 分钟或以下,但是按顺序运行时需要将近一个小时。

我认为这可能与内存问题有关,因此我实现了 APC 缓存以在脚本运行时存储关键字数据。问题是,当我查看我的任务管理器(我在 Windows 7 上运行 XAMPP)时,Apache 服务器似乎并没有比 CPU 的 46K/23% 高很多,而且我的所有其他东西都运行得很好.

我仔细查看并确保尽快关闭所有适当的处理程序,未设置/缓存大变量,但我仍然在摸索为什么它的运行时间比预期的长 3 倍网站接踵而至。我即将尝试使用 pcntl 将蜘蛛分叉以分离进程(我将尝试安装 linux 的拇指驱动器),但我想知道是否有人可能对可能给我的东西有任何想法应用性能受到影响。谢谢!