curlマルチスレッドプロキシ検証プロキシcurlマルチスレッドプロキシ検証
問題は次のとおりです:プロキシを検証するためにcurlマルチスレッドを使用します....for($i=0;$i<$maxconn;$i++) /*循环加入句柄*/ { add_curl_handle($mh,$proxyarr[$linknum],$limittime); /*添加批处理的url*/ $linknum++; } do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); while ($active && $mrc == CURLM_OK) /*处理下一个响应*/ { if (curl_multi_select($mh) != -1) /*选择是响应的句柄*/ { do { $mrc = curl_multi_exec($mh, $active); /*返回活动的链接*/ } while ($mrc == CURLM_CALL_MULTI_PERFORM); if ($mhinfo = curl_multi_info_read($mh)) /*返回活动的句柄*/ { $chinfo = curl_getinfo($mhinfo['handle']); /*获得请求的数据*/ if($chinfo['http_code']==200) /*判断是否为200状态*/ {__________________________________________________________________________现在重点是这里应该怎么写才能获取到这个验证成功的代理?这里的语句应该怎么写,好像curl_getinfo里面没有获取句柄使用的代理的功能..求高手指教.__________________________________________________________________________ } } curl_multi_remove_handle($mh, $mhinfo['handle']); /*移除句柄*/ curl_close($mhinfo['handle']); /*关闭请求*/ if(add_curl_handle($mh,$linkarray[$linknum],$limittime)&&$linknum<count($linkarray)) /*判断添加下一个句柄*/ { do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); $linknum++; } } }
ここに友達はいますか? ...競争するために 10 ポイントをオンラインで待っていますが、まだ応答がないようです...
$proxyarr[$linknum] に値を割り当てるにはどうすればよいですか?
一般的に同じ Web サイトにはプロキシ経由でアクセスすることをお勧めします (実際にそうするかどうかはわかりません)
このように、特定の $mh アイテムが正常に返される限り、対応するプロキシは正しく利用可能です
CURLOPT_PROXY プロキシのアドレスとポートを設定します
CURLOPT_PROXYUSERPWD プロキシのユーザー名とパスワードを設定します
CURLOPT_HTTPPROXYTUNNEL、CURLOPT_PROXYAUTH、CURLOPT_PROXYPORT、CURLOPT_PROXYTYPE
を使用して詳細な設定を行うこともできます
一般的に同じ Web サイトにはプロキシ経由でアクセスすることをお勧めします (実際にそうするかどうかはわかりません)
このように、特定の $mh アイテムが正常に返される限り、対応するプロキシは正しく利用可能です
CURLOPT_PROXY プロキシのアドレスとポートを設定します
CURLOPT_PROXYUSERPWD プロキシのユーザー名とパスワードを設定します
CURLOPT_HTTPPROXYTUNNEL、CURLOPT_PROXYAUTH、CURLOPT_PROXYPORT、CURLOPT_PROXYTYPE も使用できます
詳細設定は次のようになります。すでにプロキシ設定を行っていますスレッドにハンドルが 1 つある場合、ハンドルが 200 コードを返す場合、問題はプロキシを保存できることです。このハンドルで使用されるプロキシを取得する方法はありません
一般的には、プロキシを介して同じ Web サイトにアクセスする必要があります (これを行うかどうかはわかりません)
ここには誰もいません... モデレーターはどこですか
$proxyarr は順番に追加されません $mh Of?
最後の 2 つのセクションは少し奇妙です 私は通常次のように書きます:
$mh =curl_multi_init();
//単一のカールを追加します
foreach ($urls as $i => $url) {
コン[$i] =curl_init($url);
curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER,1);
curl_multi_add_handle($mh, $conn[$i]); //すべてが完了するまで待ちます。 completed
do {
curl_multi_exec($mh, $active);
}while($active);
// 各カールの戻りを処理します
foreach ($urls as $i => $url) {
$info =curl_getinfo ($conn[$i]);//これです
curl_close($conn[$i])
}
$conn と $url は 1 対 1 に対応しています
//各curlの戻り値
foreach ($urls as $i => $url) {
$info =curl_getinfo($conn[$i]);//これです
$conn $urls と 1 対 1 の対応があることは理解していますが、実際には、マルチスレッドの同時実行中に完了したハンドルを待って適切なプロキシを出力するアプローチが異なります。通常、この方法で検証する必要があるプロキシは数千ありますが、適切なプロキシを出力する前にこれらのプロキシを検証する必要があるため、時間がかかりすぎます。もう 1 つの違いがあります: 同時ハンドルの数が減りました。1 つのハンドルが完了した場合にのみ、次のハンドルを追加できます。 ...
この投稿は xuzuning によって最終編集されました: 2013-06-19 11:19:09
そうですね、私は紙の上で話すのは好きではありません
すぐにやるかどうかはすぐにわかります
さて、私は紙で話すのが好きではありません
早くやるかどうか そのとき初めて、今は紙で話す必要がないことに気づきました... - - この問題を解決するために、最初にこれを実行します.. 効果が見られたら、私はそうします続けて QQ プライベートメッセージを送ってもらえますか?curl を使用する良い方法がないようです。リクエストされた URL にもう 1 つのパラメータを渡してみませんか?パラメータの内容は、
$chinfo =curl_getinfo($mhinfo[') で取得できます。 handle']);
$chinfo['url'] には $linknum が必ず含まれます
そして、$linknum を介してプロキシが何であるかを知る必要があります
Curl を使用する良い方法はないようです。リクエストされた URL にもう 1 つのパラメータを渡しますか? パラメータの内容は $linknum で、これは
$chinfo =curl_getinfo($mhinfo['handle']); で取得できます
$chinfo['url'] には必ずこれが含まれます$linknum
を渡す場合、$linknum はプロキシが何であるかを知っている必要があります。パラメータを追加するだけで、ページ上で不正なパラメータ検証が発生しますか?
もう 1 つ、curl を使用してみてはいかがでしょうか。パラメータの内容は $linknum で、これは
$chinfo =curl_getinfo($mhinfo['handle']); で取得できます
$chinfo['url'] には必ずこの $linknum が含まれます
そして、$linknum を渡すと、エージェントが何であるかを知っている必要がありますが、これも良い方法です...確かに実行可能です..
プロセスには紆余曲折がありましたが、最終的には解決されました。ありがとう、Buzhu、そして以下の「hnxxwyq」