2013-04-30 105 views
3

当我尝试从应用程序获取数据时,我的服务器禁止IP 10分钟。 我有2个不同IP的设备。我尝试在浏览器中加载脚本:设备正确加载它。然后我尝试从应用程序请求数据,然后在浏览器中我得到“主机不可用”,但第二个设备仍然正确地在浏览器中加载脚本,直到我尝试直接从应用程序加载数据。 我认为问题出现在一些安全设置中,服务器获取特定数量的请求后会自动进行安全设置。 下面是从的cPanel日志:json请求服务器禁止IP

cpanel log

也许在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) { 
     } 
....... 

制作要求的样子:

http://nastynoises.shunamicode.com/getlastappversion/get_latest_app_version_v2.php?pn=com.shunamicode.nn

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); 
} 
?> 

我试图再次删除所有脚本和请求,但是服务器仍然禁止。 我没有很多练习,这个错误让我陷入僵局。

回答

1

我找到了解决方案。现在我的应用程序可以正常工作但它不能是问题的答案,这是一个旁路:当我设置BasicHttpParams( 服务器返回响应),所以JSONParser现在的工作:

.... 
int TIMEOUT_MILLISEC = 10000; 
HttpParams httpParams = new BasicHttpParams(); 
HttpConnectionParams.setConnectionTimeout(httpParams, 
        TIMEOUT_MILLISEC); 
HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC); 
HttpClient httpClient = new DefaultHttpClient(httpParams); 
.... 

问题仍然是开放的