我有一个与托管服务提供商上的服务器通信的 Android 应用程序。此应用程序发送一个 http 请求 php 脚本检索请求并在数据库中执行操作。我更改了数据库并调整了程序,现在我在服务器上收到错误:“您的请求超时。请重试请求。”
当我在 firefox 或 chrome 等浏览器中执行命令 http 时,命令会正确执行,但在执行代码时会发生错误。
这不是脚本或 http 请求,因此我根本看不到它可能会出现在哪里。你能帮助我吗?非常感谢你。
那里有Android代码:
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
以及当我将它作为 chrome 或 firefox 放入 Web 客户端时,我的 php 脚本工作起来很发现......我不明白...... ???