2015-08-23 2 views
0

Я реализовал HttpUrlConnection для отправки запроса на локальный http-сервер (общая сеть, Wi-Fi, WifiAP). Код работает отлично для обычных веб-серверов (www.xyz.com), но не удается сделать это для локальных серверов (192.168.x.y: z).Код Android для отправки http-запроса на локальный сервер

Код:

1) Функция, которая делает запрос

public static String getDef(String urlInput) { 
     URL url = null; 
     try { 
      url = new URL("http://" + urlInput); 
      Log.d("http", "calling " + url.toString()); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } 
     try { 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setRequestProperty("Connection", "close"); 
      conn.setRequestMethod("GET"); 
      conn.setDoInput(true); 
      conn.setReadTimeout(10000 /* milliseconds */); 
      conn.setConnectTimeout(15000 /* milliseconds */); 
      conn.connect(); 
      InputStream in = null; 
      in = (conn.getInputStream()); 
      String response =readIt(in,5) ; 
      //response = org.apache.commons.io.IOUtils.toString(in, "UTF-8"); 
      return response; 
     } catch (IOException e) { 
      Log.e("http","Error"); 
      e.printStackTrace(); 
     } 
     return "LocalClient didnt work"; 
    } 

2) функция, которая вызывает описанную выше функцию.

new AsyncTask<String, Void, String>(){ 
    @Override 
    protected String doInBackground(String... params){ 
    try { 
     return LocalClient.getDef(URL); 
    } catch (Exception e){ 
     e.printStackTrace(); 


    } 
    return "Didnt work"; 
} 
@Override 
protected void onPostExecute(String string) { 
    message.append(string); 
} 
}.execute(); 

3) Запрос получен на сервере со следующими заголовками.

GET/HTTP/1.1 
Connection: close 
User-Agent: Dalvik/2.1.0 (Linux; U; Android 5.1.1; Nexus 5 Build/LYZ28E) 
Host: 192.168.0.101 
Accept-Encoding: gzip 

Было бы замечательно, если бы кто-то мог указать мне в правильном направлении.

Я также попытался OkHttp,

public static String get(String url) throws IOException { 
     OkHttpClient client = new OkHttpClient(); 
     try { 
      Request request = new Request.Builder() 
        .url(url) 
        .build(); 
      Response response = client.newCall(request).execute(); 
      resp= response.body().string(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return resp; 
    } 

Об использовании нормального веб-сервера ответ правильно возвращенное (источник), но при использовании локального сервера я получаю следующую ошибку

java.io.EOFException 
     W/System.err﹕ at com.android.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:95) 
     W/System.err﹕ at com.android.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:179) 
     W/System.err﹕ at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:101) 
     W/System.err﹕ at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:628) 
     W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:388) 
     W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:332) 
     W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:199) 
     W/System.err﹕ at com.demo.demo.http.LocalClient.getDef(LocalClient.java:56) 
     W/System.err﹕ at com.demo.demo.wifi.connector$2$2.doInBackground(connector.java:109) 
     W/System.err﹕ at com.demo.demo.wifi.connector$2$2.doInBackground(connector.java:105) 
     W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:292) 
     W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
     W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
     W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
     W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
     W/System.err﹕ at java.lang.Thread.run(Thread.java:818) 
+0

«не удается»? Что происходит? Чем отличается результат с локальным и удаленным сервером? – selalerer

+0

Эй, там! Я тоже сталкивался с подобной проблемой. Было бы здорово, если бы кто-нибудь мог указать, что мы делаем неправильно. – Specas

+0

Как вы устанавливаете urlInput для локального сервера? «Локальный»? – BNK

ответ

1

Проблема была на стороне сервера и была разрешена с использованием соответствующих заголовков. OkHttp все еще не работает, и функция «public static String getDef (String urlInput)», упомянутая выше, работает безупречно.

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