ホスティング プロバイダーのサーバーと通信する 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 ();」の行でデバッガーを停止すると <html> Your request timed out. Please retry the request
値 "db" は " "に等しい
よろしければエラーの見つけ方、テクニックを教えていただけないでしょうか?
私はコードにこの行を入れました:
int test = response.getStatusLine().getStatusCode();
そしてテスト値は 408 なので (ウェブサイトで説明されているように) 私のホスティングプロバイダーにエラーがあることを意味します. しかし、コードから取得した http リクエストを送信するhttp://routeslibre.fr/"+ myFichierPHPbase + "?variable=" + mydataFromHMI
と、値が表示され、それを chrome または firefox として Web クライアントに送信すると、php スクリプトが非常にうまく動作するのはなぜか... わかりません.... ???