Я хочу отправить http-запрос с моего устройства Android с помощью локального прокси-сервера. Прежде чем подробно рассказать о своей проблеме, я хочу, чтобы вы знали, что это хорошо работает на всех устройствах, которые я пробовал, кроме Xperia arc S и Xperia T, работающих под Android 4.0.4. У меня есть соединение с данными на обоих устройствах, и оба они работают!Не удается решить хост Android
Я использовал DefaultHttpClient
экземпляр, чтобы отправить мой запрос, но когда код достигает той части:
client.execute(request.target, request.post);
Это разбившийся говоря следующее сообщение об ошибке:
02-21 15:37:25.677: W/System.err(1926): java.net.UnknownHostException: Unable to resolve host "192.168.010.200": No address associated with hostname
02-21 15:37:25.681: W/System.err(1926): at java.net.InetAddress.lookupHostByName(InetAddress.java:426)
02-21 15:37:25.681: W/System.err(1926): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
02-21 15:37:25.681: W/System.err(1926): at java.net.InetAddress.getAllByName(InetAddress.java:220)
02-21 15:37:25.681: W/System.err(1926): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:143)
02-21 15:37:25.681: W/System.err(1926): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
02-21 15:37:25.681: W/System.err(1926): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
02-21 15:37:25.681: W/System.err(1926): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
02-21 15:37:25.681: W/System.err(1926): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:580)
02-21 15:37:25.681: W/System.err(1926): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:534)
02-21 15:37:25.681: W/System.err(1926): at com.myapp.mms.sender.WapClient.execute(WapClient.java:59)
В вышеуказанном журнале ошибок, локальный IP-адрес - это мой локальный прокси-узел.
Вот весь мой код:
public Response execute(PostRequest request) throws Exception
{
// Set proxy and route
this.params = client.getParams();
if (isProxySet) ConnRouteParams.setDefaultProxy(params, new HttpHost(this.host, this.port));
request.post.setParams(params);
// Set header
request.post.addHeader("Accept", "*/*, application/vnd.wap.mms-message, application/vnd.wap.sic");
request.post.addHeader("Accept-Language", getCurrentAcceptLanguage(Locale.getDefault()));
// Execute the request
HttpResponse httpResponse = client.execute(request.target, request.post);
// Create the object that will receive the response
Response response = new Response();
// Get the response code
StatusLine status = httpResponse.getStatusLine();
response.code = status.getStatusCode();
// Get the response body
byte[] responseBody = null;
HttpEntity entity = httpResponse.getEntity();
if (entity != null)
{
if (entity.getContentLength() > 0)
{
responseBody = new byte[(int)entity.getContentLength()];
DataInputStream dis = new DataInputStream(entity.getContent());
dis.readFully(responseBody);
dis.close();
}
entity.consumeContent();
}
response.body = responseBody;
return response;
}
Есть ли способ обхода слишком это ошибка, которая появляется только под Android 4.0.4 или я делаю неправильно?
Или есть способ сделать то же самое без звонка в InetAddress.getByName?
Вы уже знаете, что такое адрес? Похоже, вы передаете его как String? Это не обязательно. Кроме того, вы пытались оставить лидирующие 0 из 10? –
Вы упомянули, что у вас есть соединение для передачи данных - это соединение Wi-Fi или что-то еще? Я считаю, что подсети 192.168. *. * Предназначены только для внутренних маршрутизаторов. Так что соединение 3g/4g/etc не работает, но wifi будет –
Да, я передаю адрес в виде строки. Но 'setDefaultProxy' принимает экземпляр' HttpHost'. Как я мог сделать иначе? Я не понимаю ваш второй вопрос ... – Manitoba