Re: ziskanie obsahu stranky pomocou HttpClient a HttpGet a poskodene kodovanie

2012-12-07 Tema obsahu Jaroslav Hurdes

Já pro toto používám InputStreamReader s nastaveným kodováním.

private String getDataFrom(URL url, String request) throws IOException {
OutputStream os = null;
InputStream is = null;
InputStreamReader isr = null;
HttpURLConnection connection = null;

try {
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod(HTTP_REQUEST_METHOD_POST);
connection.setRequestProperty(HTTP_CONTENT_TYPE, 
CONTENT_TYPE_APPLICATION_XML);

connection.setDoInput(true);
connection.setDoOutput(true);

os = connection.getOutputStream();
os.write(request.getBytes());
os.flush();

is = connection.getInputStream();
isr = new InputStreamReader(is, responseEncoding);
byte [] response = DataUtils.readFrom(isr);
return new String(response);
} finally {
if(os != null) {
try { os.close(); } catch(Exception e) {};
}

if(isr != null) {
try { isr.close(); } catch(Exception e) {};
} else {
if(is != null) {
try { is.close(); } catch(Exception e) {};
}
}

if(connection != null) {
try { connection.disconnect(); } catch(Exception e) {};
}
}
}

a analogicky zápis je přes OutputStreamWriter

OutputStreamWriter osw = new OutputStreamWriter(os, responseEncoding);
osw.write(responseDataXml);
osw.flush();

Jaroslav Hurdes

Dne 7.12.2012 8:43, Ivan Polak napsal(a):

Zdravim konferenciu,

chcel som pouzit HttpClient z Apache HttpComponents Client
(http://hc.apache.org/httpcomponents-client-ga/) a ziskat obsah
jedneho webu, nasledovnym kodom:

static StringBuffer getRequest() {
 StringBuffer result = new StringBuffer();
 HttpClient client = new DefaultHttpClient();
 HttpGet request = new HttpGet(http://www.adresa.sk;);

 HttpParams params = new SyncBasicHttpParams();
 HttpProtocolParams.setContentCharset(params, UTF-8);

 request.setParams(params);

 try {
 HttpResponse response = client.execute(request);

 HttpEntity entity = response.getEntity();
 if (entity != null) {
 InputStream stream = entity.getContent();
 try {
 BufferedReader reader =
 new BufferedReader(new InputStreamReader(stream));
 String line;
 while ((line = reader.readLine()) != null) {
 result.append(line);
 }
 } finally {
 stream.close();
 }
 }
 } catch (Exception e) {
 e.printStackTrace();
 }
 return result;
 }


vsetko je OK, ale ziskany obsah ma poskodenu diakritiku (cielovy web
je urcite v kodovani UTF-8).

prosim, neviete niekto poradit ako dosiahnut spravnu diakritiku.

dakujem

Ivan





Re: ziskanie obsahu stranky pomocou HttpClient a HttpGet a poskodene kodovanie

2012-12-07 Tema obsahu Ivan Polak
dakujem vsetkym za reakcie, pouzil som toto:

String obsah = EntityUtils.toString(entity, UTF-8)

a vsetko je OK.

este raz vdaka!

Ivan

2012/12/7 Martin Kuba ma...@ics.muni.cz:
 Dne 7.12.2012 08:43, Ivan Polak napsal(a):

  InputStream stream = entity.getContent();
  try {
  BufferedReader reader =
  new BufferedReader(new
 InputStreamReader(stream));


 Problém je v tom new InputStreamReader(stream), ten konstruktor bere
 default kódování JVM na kterém běží, tedy na klientovi. Správně by to mělo
 být

  new InputStreamReader(stream,utf-8)

 Viz
 http://docs.oracle.com/javase/7/docs/api/index.html?java/io/InputStreamReader.html

 Makub
 --
 ~~
 CERIT-SC   Martin Kuba
 Institute of Computer Scienceemail: ma...@ics.muni.cz
 Masaryk University http://www.ics.muni.cz/~makub/
 Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775
 --



Re: ziskanie obsahu stranky pomocou HttpClient a HttpGet a poskodene kodovanie

2012-12-06 Tema obsahu Petr Franta
Koukal jsem na stránku http://www.adresa.sk a je tam nastaveno:

meta http-equiv=Content-Type content=text/html; charset=windows-1250

Petr


2012/12/7 Ivan Polak ivan.po...@f4s.sk

 Zdravim konferenciu,

 chcel som pouzit HttpClient z Apache HttpComponents Client
 (http://hc.apache.org/httpcomponents-client-ga/) a ziskat obsah
 jedneho webu, nasledovnym kodom:

 static StringBuffer getRequest() {
 StringBuffer result = new StringBuffer();
 HttpClient client = new DefaultHttpClient();
 HttpGet request = new HttpGet(http://www.adresa.sk;);

 HttpParams params = new SyncBasicHttpParams();
 HttpProtocolParams.setContentCharset(params, UTF-8);

 request.setParams(params);

 try {
 HttpResponse response = client.execute(request);

 HttpEntity entity = response.getEntity();
 if (entity != null) {
 InputStream stream = entity.getContent();
 try {
 BufferedReader reader =
 new BufferedReader(new
 InputStreamReader(stream));
 String line;
 while ((line = reader.readLine()) != null) {
 result.append(line);
 }
 } finally {
 stream.close();
 }
 }
 } catch (Exception e) {
 e.printStackTrace();
 }
 return result;
 }


 vsetko je OK, ale ziskany obsah ma poskodenu diakritiku (cielovy web
 je urcite v kodovani UTF-8).

 prosim, neviete niekto poradit ako dosiahnut spravnu diakritiku.

 dakujem

 Ivan



Re: ziskanie obsahu stranky pomocou HttpClient a HttpGet a poskodene kodovanie

2012-12-06 Tema obsahu Petr Franta
jaké je nastavené kódování se dá zjistit takto:
String charset = EntityUtils.getContentCharSet(entity);

Popřípadě text stránky:
String obsah = EntityUtils.toString(entity, UTF-8);

Snad to pomůže ...

Petr



2012/12/7 Ivan Polak ivan.po...@f4s.sk

 ospravedlnujem sa, to som zabudol napisat, to som tam uviedol iba ako
 priklad, bola tam samozrejme ina adresa :-)

 Ivan

 2012/12/7 Petr Franta petr.fra...@gmail.com:
  Koukal jsem na stránku http://www.adresa.sk a je tam nastaveno:
 
  meta http-equiv=Content-Type content=text/html;
 charset=windows-1250
 
  Petr
 
 
 
  2012/12/7 Ivan Polak ivan.po...@f4s.sk
 
  Zdravim konferenciu,
 
  chcel som pouzit HttpClient z Apache HttpComponents Client
  (http://hc.apache.org/httpcomponents-client-ga/) a ziskat obsah
  jedneho webu, nasledovnym kodom:
 
  static StringBuffer getRequest() {
  StringBuffer result = new StringBuffer();
  HttpClient client = new DefaultHttpClient();
  HttpGet request = new HttpGet(http://www.adresa.sk;);
 
  HttpParams params = new SyncBasicHttpParams();
  HttpProtocolParams.setContentCharset(params, UTF-8);
 
  request.setParams(params);
 
  try {
  HttpResponse response = client.execute(request);
 
  HttpEntity entity = response.getEntity();
  if (entity != null) {
  InputStream stream = entity.getContent();
  try {
  BufferedReader reader =
  new BufferedReader(new
  InputStreamReader(stream));
  String line;
  while ((line = reader.readLine()) != null) {
  result.append(line);
  }
  } finally {
  stream.close();
  }
  }
  } catch (Exception e) {
  e.printStackTrace();
  }
  return result;
  }
 
 
  vsetko je OK, ale ziskany obsah ma poskodenu diakritiku (cielovy web
  je urcite v kodovani UTF-8).
 
  prosim, neviete niekto poradit ako dosiahnut spravnu diakritiku.
 
  dakujem
 
  Ivan
 
 



Re: ziskanie obsahu stranky pomocou HttpClient a HttpGet a poskodene kodovanie

2012-12-06 Tema obsahu Kamil Podlesak
Klasika - je tam použito kódování aktuální platformy, takže CP1250
pokud je to spuštěno na windows.
Jednoparametrový konstruktor  InputStreamReader by měl být označen
jako deprecated - když už se tahle zhůvěřilost vůbec do JDK dostala...

2012/12/7 Ivan Polak ivan.po...@f4s.sk:
 BufferedReader reader =
 new BufferedReader(new InputStreamReader(stream));

 Ivan

-- 

Kamil Podlešák