错误:“;您的请求超时.请重试请求";使用Android和PHP程序


ERROR: "Your request timed out. Please retry the request." with Android And PHP Program

我有一个Android应用程序,它可以与托管提供商上的服务器通信。这个应用程序发送一个http请求php脚本来检索请求并在数据库中执行操作。我更改了数据库,并调整了程序,现在我在服务器上收到一个错误:"您的请求超时。请重试请求。"

当我在firefox或chrome等浏览器中执行命令http时,该命令会正确执行,避免在执行代码时出现错误。

这不是脚本或http请求,因此我根本看不出这可能会发生在哪里。你能帮我吗?非常感谢。

那里的安卓代码:

public class ConnexionSQL extends AsyncTask<Object,Void, ArrayList<String[]> > {

private static ArrayList<String[]> lesMessagesEtDate;
private String mydataFromHMI;
private String myFichierPHPbase;
private ProgressDialog pd;
private String[] splitData;
private boolean isProblemConnexion;
public ConnexionSQL(Activity activity) {
    pd = new ProgressDialog(activity);
    lesMessagesEtDate = new ArrayList<String[]>();
    mydataFromHMI = "";
    myFichierPHPbase="";
    isProblemConnexion = false;
}

protected ArrayList<String[]> doInBackground(Object... parametres) {
    Object[] tabArg = parametres;
    ArrayList<String[]>  messagesDateEtLocalisation = new ArrayList<String[]>();
    pd.show();
     if (((String)tabArg[3]).equalsIgnoreCase("insert")){
         insertIntoBD((String)tabArg[0], (Context)tabArg[1], (String)tabArg[2]);
     }else if(((String)tabArg[3]).equalsIgnoreCase("connect")){
         messagesDateEtLocalisation = ConnexionBD((String)tabArg[0], (Context)tabArg[1], (String)tabArg[2]);
     }
    return messagesDateEtLocalisation;
}

protected void onPreExecute() {
    pd.setMessage("Chargement en cours");
    pd.show();
}

protected void onProgressUpdate(){
    pd.setMessage("Chargement en cours");
    pd.show();
}
protected void onPostExecute(ArrayList<String[]> array)
{
    pd.setMessage("Le chargement se termine");
    pd.dismiss();     
}
public void insertIntoBD(String dataFromHMI, Context context, String FichierPHPbase){

    mydataFromHMI = dataFromHMI;
    myFichierPHPbase = FichierPHPbase;

    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    try{
        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
        HttpProtocolParams.setUseExpectContinue(params, false);  
        HttpConnectionParams.setConnectionTimeout(params, 10000);
        HttpConnectionParams.setSoTimeout(params, 10000);
        ConnManagerParams.setMaxTotalConnections(params, 1000);
        ConnManagerParams.setTimeout(params, 30000);
        SchemeRegistry registry = new SchemeRegistry();
        registry.register(new Scheme("http",PlainSocketFactory.getSocketFactory(), 80));
        registry.register(new Scheme("https",PlainSocketFactory.getSocketFactory(), 80));
        ThreadSafeClientConnManager manager = new ThreadSafeClientConnManager(params, registry);
        HttpClient httpclient = new DefaultHttpClient(manager, params);
        HttpPost httppost = new HttpPost("http://routeslibre.fr/"+ myFichierPHPbase + "?variable=" + mydataFromHMI);
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        httpclient.execute(httppost);

    }
    catch(Exception e){
        Log.i("taghttppost",""+e.toString());
        isProblemConnexion = true;
    }
}

public ArrayList<String[]> ConnexionBD(String dataFromHMI, Context context,String FichierPHPbase) {
    mydataFromHMI = dataFromHMI;
    myFichierPHPbase = FichierPHPbase;
    String result = null;
    InputStream is = null;
    JSONObject json_data=null;
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    try{
        //commandes httpClient
        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
        HttpProtocolParams.setUseExpectContinue(params, false);  
        HttpConnectionParams.setConnectionTimeout(params, 10000);
        HttpConnectionParams.setSoTimeout(params, 10000);
        ConnManagerParams.setMaxTotalConnections(params, 1000);
        ConnManagerParams.setTimeout(params, 30000);
        SchemeRegistry registry = new SchemeRegistry();
        registry.register(new Scheme("http",PlainSocketFactory.getSocketFactory(), 80));
        registry.register(new Scheme("https",PlainSocketFactory.getSocketFactory(), 80));
        ThreadSafeClientConnManager manager = new ThreadSafeClientConnManager(params, registry);

        HttpClient httpclient = new DefaultHttpClient(manager, params);             
        GestionStrings gestionString = new GestionStrings();
        splitData = mydataFromHMI.split(";;;");
        mydataFromHMI = gestionString.blancTraitement(splitData[0]) 
                + ";;;" 
                + gestionString.blancTraitement(splitData[1]) 
                + ";;;";
        HttpPost httppost = new HttpPost("http://routeslibre.fr/"+ myFichierPHPbase + "?variable=" + mydataFromHMI);
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        is = entity.getContent();
    }
    catch(Exception e){
        Log.i("taghttppost",""+e.toString());
        isProblemConnexion = true;
    }

    //conversion de la réponse en chaine de caractère
    try
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));
        StringBuilder sb  = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) 
        {
            sb.append(line + "'n");
        }
        is.close();
        result = sb.toString();
        if (result.startsWith("<html>"))
        {
            isProblemConnexion = true;
        }
    }
    catch(Exception e)
    {
        Log.i("tagconvertstr",""+e.toString());
        isProblemConnexion = true;
    }
    //recuperation des donnees json
    try{
        JSONArray jArray = new JSONArray(result);
        for(int i=0;i<jArray.length();i++)
        {
            json_data = jArray.getJSONObject(i);
            String[] messageEtDate = new String[2];
            messageEtDate[0] = json_data.getString("message");
            messageEtDate[1] = json_data.getString("date");
            lesMessagesEtDate.add(messageEtDate);

        }
        //setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, lesMessages));
    }
    catch(JSONException e){
        Log.i("tagjsonexp",""+e.toString());
        isProblemConnexion = true;
    } catch (ParseException e) {
        Log.i("tagjsonpars",""+e.toString());
        isProblemConnexion = true;
    }
    if (isProblemConnexion){
        lesMessagesEtDate = new ArrayList<String[]>();
        lesMessagesEtDate.add(new String[]{"connexion_error_1234"});
        isProblemConnexion = false;
    }
    return lesMessagesEtDate;
}

}

有php脚本代码:

$base = mysql_connect ('sql31.free-h.org:3306', '*****', '******'); 
mysql_select_db ('routeslibre', $base) ;  
$variable = $_GET['variable'];
$first_token  = strtok($variable, ";;;");
$second_token = strtok(";;;");
$req =mysql_query("SELECT message, date from routeslibre.routeslibre where departement='$first_token' AND      voie='$second_token' ORDER BY date");
$output=array();
while ($row=mysql_fetch_array($req)) {    
$output[]=$row;    
} 
//on encode en JSON 
print(json_encode($output));
mysql_free_result ($req);

当我在"is.close()"行上停止调试器时,值"db"等于"<html> Your request timed out. Please retry the request"

如果你不介意,你能给我一个技巧,一种找到错误的方法吗?

我把这一行放在代码中:int test = response.getStatusLine().getStatusCode();并且测试值是408,所以(如网站中所描述的)这意味着我在我的托管提供商中有错误。但是,为什么当我把http请求从http://routeslibre.fr/"+ myFichierPHPbase + "?variable=" + mydataFromHMI的代码:value中检索出来,并把它作为chrome或firefox放在web客户端中时,我的php脚本会发现。。。我不明白???

我找到了一个解决方案,我循环执行代码,直到我收到一个请求(从服务器检索到的状态等于200),或者,如果请求没有提供任何结果,就会启动错误。这里有我的解决方案:

        String httpRequest = new String("http://routeslibre.fr/"+ myFichierPHPbase + "?variable=" + mydataFromHMI);
        HttpPost request = new HttpPost(httpRequest); 
        HttpParams httpParameters = new BasicHttpParams();
        HttpProtocolParams.setVersion(httpParameters, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(httpParameters, HTTP.UTF_8);
        DefaultHttpClient httpclient = new DefaultHttpClient(httpParameters);
        HttpResponse response = null;
        for(int i= 0; i < 30; i++){
            response = httpclient.execute(request);
            if (response.getStatusLine().getStatusCode() == 200){
                break;
            }else if (i == 29){
                
                //ERROR CODE
            }
        }