3

リモートhttpサーバーからデータを取得する必要があります。マルチリクエストにCurlクラスを使用しています。私の問題はリモートサーバーのファイアウォールです。10000のGETリクエストとPOSTリクエストの間に1000を送信しています。そしてサーバーは私をDDOSから禁止します。

İはこの手段を使用しました。

  • パッケージにはまだヘッダー情報が含まれています

    curl_setopt($ this-> ch、CURLOPT_HTTPHEADER、$ header);

  • パッケージにはまだランダムなリファラー情報が含まれています

    curl_setopt($ this-> ch、CURLOPT_REFERER、$ refs [rand(0、count($ refs))]);

  • パッケージにはまだランダムなユーザーエージェントが含まれています

    curl_setopt($ this-> ch、CURLOPT_USERAGENT、$ agent [rand(0、count($ agent))]);

  • ランダムな間隔でスリープ機能を使ってパッケージを送信します。

    sleep(rand(0,10));

ただし、1時間ごとにサーバーへのアクセスを禁止します。

私の悪い英語でごめんなさい:)みんなありがとう。

4

1 に答える 1

1

短時間に多数のリクエストをサーバーに送信すると、意図したものであるかどうかに関係なく、DOS攻撃と同じ影響を与える可能性があります。簡単な解決策は、スリープラインを変更するsleep(rand(0,10));ことです。これは、次のリクエストを即座に送信する可能性が11分の1であることsleep(3);を意味します。つまり、リクエスト間には常に3秒(約)があります。ほとんどのサーバーを満足させるには、3秒で十分です。これが機能することを確認したら、値を2または1に減らして、処理を高速化できるかどうかを確認できます。

はるかに優れたソリューションは、サーバー上にAPIを作成して、1つ、または少なくとも少数のリクエストで必要なデータを取得できるようにすることです。明らかに、これは、サーバーに変更を加えることができる場合(または、ユーザーに代わって変更を加えることができる人を説得できる場合)にのみ可能です。

于 2012-11-10T21:13:58.333 に答える