ホームページ > バックエンド開発 > PHPチュートリアル > CURL バッチ検証プロキシについての質問

CURL バッチ検証プロキシについての質問

WBOY
リリース: 2016-06-23 14:13:31
オリジナル
1002 人が閲覧しました

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
を使用して詳細な設定を行うこともできます

$proxyarr[$linknum] はどうですか?割り当てられる価値はありますか?


一般的に同じ Web サイトにはプロキシ経由でアクセスすることをお勧めします (実際にそうするかどうかはわかりません)
このように、特定の $mh アイテムが正常に返される限り、対応するプロキシは正しく利用可能です

CURLOPT_PROXY プロキシのアドレスとポートを設定します
CURLOPT_PROXYUSERPWD プロキシのユーザー名とパスワードを設定します

CURLOPT_HTTPPROXYTUNNEL、CURLOPT_PROXYAUTH、CURLOPT_PROXYPORT、CURLOPT_PROXYTYPE も使用できます
詳細設定は次のようになります。すでにプロキシ設定を行っていますスレッドにハンドルが 1 つある場合、ハンドルが 200 コードを返す場合、問題はプロキシを保存できることです。このハンドルで使用されるプロキシを取得する方法はありません

一般的には、プロキシを介して同じ Web サイトにアクセスする必要があります (これを行うかどうかはわかりません)

このように、特定の $ がある限り、 mh 項目は正常に返されます。これは、対応するプロキシが正しく使用可能であることを意味します。または、プロキシが使用可能であることが判明した場合は、このプロキシを取得する必要があります。バッチ検証であるため、各ハンドルは異なるものを使用します。プロキシ。ウェブサイトは同じです


ここには誰もいません... モデレーターはどこですか

$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]);//これです

curl_close($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」

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート