アプリでサーバーからデータを取得しようとすると、サーバーが 10 分間 IP を禁止します。2 つの異なる IP を持つ 2 つのデバイスがあります。ブラウザでスクリプトを読み込もうとしています: デバイスはスクリプトを正しく読み込みます。次に、アプリからデータを要求しようとすると、その後ブラウザーで「ホストが利用できません」と表示されますが、アプリからデータを直接ロードしようとするまで、2 番目のデバイスはブラウザーにスクリプトを正しくロードします。問題は、サーバーが特定の量のリクエストを取得した後に自動的に作成されるセキュリティ設定にあると思います。cPanel からのログは次のとおりです。
たぶん、Apache設定には次のようなものが存在します:
if (browser == unknown || OS == unknown)
banIP(360000);
リクエストコード:
.......
JSONObject json = null;
List<NameValuePair> pn = new ArrayList<NameValuePair>();
pn.add(new BasicNameValuePair("pn", getApplication()
.getPackageName()));
try {
json = jParser.makeHttpRequest(
"http://nastynoises.shunamicode.com/getlastappversion/get_latest_app_version_v2.php","GET", pn);
} catch (Exception e) {
}
.......
リクエストを次のようにします。
JsonParser:
makeHttpRequest(){
....
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
....
}
サーバーリターン:
05-01 00:07:21.545: D/shunami(1087): <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
05-01 00:07:21.545: D/shunami(1087): <html><head>
05-01 00:07:21.545: D/shunami(1087): <title>406 Not Acceptable</title>
05-01 00:07:21.545: D/shunami(1087): </head><body>
05-01 00:07:21.545: D/shunami(1087): <h1>Not Acceptable</h1>
05-01 00:07:21.545: D/shunami(1087): <p>An appropriate representation of the requested resource /getlastappversion/get_latest_app_version_v2.php could not be found on this server.</p>
05-01 00:07:21.545: D/shunami(1087): <p>Additionally, a 404 Not Found
05-01 00:07:21.545: D/shunami(1087): error was encountered while trying to use an ErrorDocument to handle the request.</p>
05-01 00:07:21.545: D/shunami(1087): </body></html>
php:
<?php
$response = array();
require_once __DIR__ . '/con.php';
$db = new DB_CONNECT();
if (isset($_GET["pn"])) {
$result = mysql_query("SELECT * FROM `latest_versions` WHERE `package_name` = '".$_GET["pn"]."'");
if (!empty($result)) {
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_array($result)) {
$response["success"] = 1;
$response["version"] = $row['version'];
$response["approxdate"] = $row['approxdate'];
echo json_encode($response);
}
} else {
$response["success"] = 0;
$response["message"] = "Package not exist";
echo json_encode($response);
}
} else {
$response["success"] = 0;
$response["message"] = "Empty result";
echo json_encode($response);
}
} else {
$response["success"] = 0;
$response["message"] = "Required field(s) is missing";
echo json_encode($response);
}
?>
すべてのスクリプトを削除して再度リクエストしようとしましたが、サーバーはまだ禁止されています。私にはあまり練習がなく、このエラーで行き詰まりました。