Я пытаюсь получить данные из базы данных mysql, расположенной на удаленном сервере, через php в android. Это работало нормально во время работы в localhost. Но когда он находится на удаленном сервере, я получаю HTML-коды вместо ответа JSON с сервера. Я попробовал вставить URL-адрес ( http://ksos.0fees.us/pgm_list.php?day=1&hall=A ) в браузере, что привело к правильному выходу JSON. Ниже приведен ответ HTML.
<html><body> <script type="text/javascript" src="/aes.js" ></script> <script>function toNumbers(d) {var e=[]; d.replace(/(..)/g,function(d){e.push(parseInt(d,16))}); return e } function toHex() {for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f<d.length;f++) e+=(16>d[f]?"0":"")+d[f].toString(16); return e.toLowerCase() } var a=toNumbers("f655ba9d09a112d4968c63579db590b4"),b=toNumbers("98344c2eee86c3994890592585b49f80"),c=toNumbers("5cb1c0309e553acda177d912f21ac485"); document.cookie="__test="+toHex(slowAES.decrypt(c,2,a,b))+"; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/"; location.href="http://ksos.0fees.us/pgm_list.php?day=1&hall=A&ckattempt=1"; </script> <noscript>This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support</noscript> </body></html>
Ниже приведен мой запрос на сервер для получения ответа
public String makeServiceCall(String url, int method, List<NameValuePair> params){ try{ DefaultHttpClient httpclient = new DefaultHttpClient(); HttpEntity httpentity = null; HttpResponse httpresponse = null; if (method == POST) { HttpPost httppost = new HttpPost(url); httppost.setHeader("User-Agent", ua); httppost.setHeader("Accept", "application/json"); if(params!=null){ httppost.setEntity(new UrlEncodedFormEntity(params)); } httpresponse = httpclient.execute(httppost); } else if(method == GET){ if(params!=null){ String paramString = URLEncodedUtils.format(params, "utf-8"); url += "?" + paramString; } HttpGet httpget = new HttpGet(url); // HttpPost httppost = new HttpPost(url); httpget.setHeader("User-Agent", ua); httpget.setHeader("Accept", "application/json"); httpresponse = httpclient.execute(httpget); } httpentity = httpresponse.getEntity(); is = httpentity.getContent(); }catch(UnsupportedEncodingException e){ e.printStackTrace(); }catch (ClientProtocolException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } try{ BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"),8); // BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine())!= null) { sb.append(line+"\n"); } is.close(); response = sb.toString(); }catch(Exception e){ Log.e("Buffer Error", "Error : "+e.toString()); } return response; }
Я попытался установить и не устанавливать setHeader для пользовательского агента. Часть php выглядит следующим образом:
$q=mysql_query("SELECT ..........."); if(!empty($q)){ while($row=mysql_fetch_assoc($q)) $pgmlist[]=$row; $response["pgmlist"] = $pgmlist; echo json_encode($response); } else{ $response["success"] = 0; $response["message"] = "No record found"; echo json_encode($response); }
в$q=mysql_query("SELECT ..........."); if(!empty($q)){ while($row=mysql_fetch_assoc($q)) $pgmlist[]=$row; $response["pgmlist"] = $pgmlist; echo json_encode($response); } else{ $response["success"] = 0; $response["message"] = "No record found"; echo json_encode($response); }
Atlast нашел решение …
Проблема не в части android или php. Это была проблема с сервером. Хостинг-сайт, который я использовал, отправляет файлы cookie на клиентскую сторону, который не обрабатывается внутри android, но автоматически обрабатывается браузерами. Я использовал другой хостинг-сайт, где файлы cookie не были задействованы и получили необходимый json-выход.