問題タブ [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.
php - PHPCodeignitercurl_multi_initエラー
これは私のコードです:
私は得るFatal error: Call to undefined function curl_multi_init() in /var/www/application/libraries/facebook.php on line 123
これは私のローカルマシンで実行されています...それは問題になる可能性がありますか?理解できない。
php - PHPで複数のcurl_multiリクエストを同期するには?
curl_multi を使用していくつかの非同期要求を実行したいのですが、その時点で要求のグループを作成したいと考えています。要求の応答が私のニーズを満たしたときに、すべての要求を停止するつもりだからです。これが私のコードです:
これは、curl_multi コードを使用した getOfertas() 内の関数です。
php - ハンドルごとに異なるプロキシを持つcurl_multi_init?
を使用してスクリプトを作成したいのですが、ハンドルごとではなく、プロキシで を 1 回だけcurl_multi_init()
指定する必要がありますcurl_setopt()
。ハンドルごとに異なるプロキシでこれを解決する方法はありますか?
私は解決策を得ました。新しいハンドルで必要なプロキシを指定してからcurl_init()
、新しいハンドルを追加します。
など。
php - PHP マルチカール - マルチカールの実行中に何かを取得する
マルチカールを使用したシンプルなスクレイピングパーサーを設計しています。多くの例を見てきましたが、少し問題があります。パーサーは最も遅い応答を待ってから、解析を開始します。
マルチカールがまだ実行されている間に解析を開始するクールな方法はありますか? 最も遅いリクエストが 10 秒の場合、スクリプト全体が 10 秒待機し、その後ソースの解析が開始されるためです。
ありがとうニック
php - プログレス機能とCURLマルチ
マルチカールを使用してダウンロードするリモートファイル(画像など)のリストを含む次のコードがあります。
問題は、ある種の進行状況バーを作成したいので、php はダウンロードの進行状況に関する情報を提供する必要があることです。たとえば、ファイルのダウンロードが完了するたびに1ずつ増加するカウンターが必要です(このカウンターを.txtファイルに書き込み、ajaxでn秒ごとに取得して、ファイルの数を知るのは簡単です)その瞬間までダウンロードされています)。この目的のために、「curl_progress_callback」関数を追加しましたが、その中に何を入れればいいのかわかりません...
編集:最終的に、私は小さな関数でこれを達成することができました
しかし、誰かがより良い解決策を知っていることに感謝します...
php - リクエスト間の PHP cURL multi_exec 遅延
標準の cURL_multi_exec 関数 (以下の例) を実行すると、要求されたすべての cURL ハンドルが一度に取得されます。各リクエスト間に 100 ミリ秒の遅延を入れたいのですが、それを行う方法はありますか? (Google および StackOverflow 検索で何も見つかりませんでした)
curl_multi_exec() の前に usleep() を試しました。これにより、スクリプトの速度が低下しますが、各リクエストは延期されません。
私はこれに一日中取り組んでいます。どんな助けでも大歓迎です! ありがとうございました。
編集: cUrl 以外の方法はありますか? それは私の質問にも答えます。
php - PHP CURL_Multi 終了したハンドルのステータスをチェック、削除、追加、タイムアウト
そのため、約 3000 個のリンクを処理しています。curl_multi を使用してプロセスを高速化しています。一度に 20 の単純なプロセスを使用し、20 個すべてが終了するのを待って、さらに 20 個の方法を処理しましたが、特にこれらの 20 個のリンクの 1 つがダウンロードに永遠にかかる場合は、これは非効率的であることがわかっています。そのため、その URL からコンテンツを取得したらすぐにハンドルを追加/削除して、3000 個のリンクすべてを通過するループを作成する方法を知る必要があります。
私はこれらの基礎のいくつかを使用しています:
次のことができる必要があります。
1)ハンドルがいつ完了したかを確認し、ハンドルが属する多次元配列のURLを確認します
2) そのハンドルの内容を取得し、そのハンドルの内容が の一部であるかどうかに基づいてプロセスを割り当てます$allurls[0][0],$allurls[0][1]
($allurls[0][2]
それらのそれぞれに異なるプロセス)
$allurls
3)すべてのリンクが処理されるまで、そのハンドルを削除し、別の URL を追加します。
4) 一定時間以上、たとえば 2 分以上かかった URL に対して手動でタイムアウトを処理します ( CURLOPT_CONNECTTIMEOUT
&CURLOPT_TIMEOUT
が curl_multi 環境で適切に機能しないため) (または、少なくともhttp: //curl.haxx.se/mail/curlphp-2008-06/0006.html ))、しかし、$allurls
その URL がタイムアウトしたかどうかを知る必要もあります...
これはちょっとした作業のように思えますが、これを知っている人にとっては、それほど多くの作業ではないはずです...具体的な方法が本当にわかりません...ありがとう。
php - PHP curl_multi 残留ハンドルを削除して閉じる
curl_multi を使用して約 3k の URL を通過するループがあり、curl_multi から残りのハンドルを削除して、リソースを無駄にしないようにする必要があります...それを行う方法はありますか? 3k ハンドルのそれぞれを調べて、それらを削除してから閉じますか? それらがすでに削除されて閉じられている場合はどうなりますか?
最後に手動タイムアウトを使用します。これは、cURL_multi がCURLOPT_CONNECTTIMEOUT
/CURLOPT_TIMEOUT
オプションでタイムアウトできないことを説明しており、まだデータを取得しようとしている URL ハンドルが残っている可能性があります。
ループを実行してもかまいませんforeach()
が、ハンドルが既に削除されているかどうかを確認するにはどうすればよいですか?削除しようとすると、「これは設定されていません」タイプのエラーが発生しませんか? curl を削除すると、実際にunset()
その変数を処理できますか。つまり、isset()
テストを実行できますか?
php - cURL マルチによって開かれているソケットが多すぎます
cURL multi を使用して、いくつかの Web サイトからデータを取得しています。コード付き:
しかし、問題は cURL が開いているソケットが多すぎて Web サーバーに接続できないことです。各接続、cURL は Web サーバーへの新しいソケットを作成します。現在の接続を次の接続のためにキープアライブにしたい。100個のURLが必要ない場合、cURLは処理するために100個のソケットを作成する必要があります:(
私を助けてください。本当にありがとう !
php - 1 つの URL の多数の IP アドレスを同時にテストする CURL: 応答の問題
URL に対して curl リクエストを行っています。この URL は多くのサーバーによってホストされています ==> 多くの IP アドレス。「www.example.com」がホストされていると想像してください
- 192.168.60.31
- 198.166.15.15
- 217.15.74.1
ここに私が行ったテストがあります:
ここでの問題は、情報を視覚化すると、次のようになることです。
ご覧のとおり、一部のサーバーでは時間情報を取得できません (すべてが 0 に設定されています)。このコードに問題はありますか?