2015-09-05 2 views
3

Я пытаюсь получить данные из базы данных mysql, расположенной на удаленном сервере, через php в android. Это работало нормально во время работы в localhost. Но когда он находится на удаленном сервере, я получаю HTML-коды вместо ответа JSON с сервера. Я попробовал вставить URL-адрес (http://ksos.0fees.us/pgm_list.php?day=1&hall=A) в браузере, что привело к правильному выходу JSON. Ниже приведен ответ HTML.Получение ответа HTML вместо JSON в android

<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 для агента пользователя. РНР часть выглядит следующим образом:

$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); 
} 
+0

Пожалуйста, напишите php-код, в котором вы эхом отдаете вывод в приложение для Android. –

+0

Я не ожидаю какой-либо проблемы в php, потому что я получаю желаемый результат при проверке с URL-адресом в любом браузере. – Niyaz

+0

Вопрос: Что часть этого вопроса не является * серверной стороной? Q: Вы пишете (или контролируете) серверное приложение PHP? В: Использует ли ваша конфигурация localhost * то же * PHP-приложение и * тот же * HTTP-сервер? В: Что говорят серверные журналы? Любая разница между «localhost» и «удаленными» HTTP-запросами? Сколько проблем вы устранили с сервера? – paulsm4

ответ

4

Atlast нашел решение ...

Проблема не с андроида или PHP части. Это была проблема с сервером. Хостинг-сайт, который я использовал, отправляет файлы cookie на клиентскую сторону, который не обрабатывается внутри android, но автоматически обрабатывается браузерами. Я использовал другой хостинг-сайт, где файлы cookie не были задействованы и получили необходимый json-выход.

+2

Не могли бы вы объяснить больше? У меня такая же проблема – Sujiz

+2

Большинство бесплатных веб-хостинга отправили куки для улучшения опыта работы с клиентами.Это хорошо в случае браузеров, поскольку браузеры управляют этим куки. Но в приложении для Android, которое мы создаем, если мы обычно не пишем никакого кода, чтобы принимать эти куки. Отсюда и эта ситуация. Либо нам придется писать код, чтобы принимать файлы cookie, либо искать сервер, который не отправляет файлы cookie. – Niyaz

+0

Не могли бы вы объяснить и написать код, как принять cookies @Niyaz –

Смежные вопросы