Java - Invalid Http response Vyřešeno

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Matiseli
Level 2.5
Level 2.5
Příspěvky: 381
Registrován: červen 14
Bydliště: Podíváte-li se roku 2023 na oblohu, tak na té planetě více v pravo
Pohlaví: Nespecifikováno
Stav:
Offline

Java - Invalid Http response

Příspěvekod Matiseli » 21 lis 2014 16:20

Zdravím,
včera jsem se setkal s potíží, kterou já ne a ne vyřešit.

Popis výjimky
Při opakovaném připojení na stejný webový server (nikoli stejnou webovou stránku) není - po 8 projití cyklu - schopna Java onu stránku přečíst:

Kód: Vybrat vše

 java.io.IOException: Invalid Http response
   at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
   at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
   at jádro.Databáze.přečtiObsah(Databáze.java:22)
   at jádro.Panřídící.běž(Panřídící.java:159)
   at jádro.VolbaJazyku.main(VolbaJazyku.java:135)

Používám JRE 8.
===============================================================
Dodatek:
Webový server: http://www.game-debate.com
Aplikace, při níž nastane výjimka: http://www.game-debate.com/games/index.php?g_id=9384&game=99%20Levels%20To%20Hell
===============================================================

Děkuji za odpověď.

Reklama
Uživatelský avatar
domitea
Tvůrce článků
Level 4.5
Level 4.5
Příspěvky: 1971
Registrován: červen 09
Bydliště: Královehradecký kraj
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Java - Invalid Http response

Příspěvekod domitea » 21 lis 2014 16:46

Bez zdrojáku toho moc nezjistím, ale na začátek bych zkusil dělat názvy bez diakritiky. Ona to sice Java umožňuje, ale aplikace zase ne ;)

Matiseli
Level 2.5
Level 2.5
Příspěvky: 381
Registrován: červen 14
Bydliště: Podíváte-li se roku 2023 na oblohu, tak na té planetě více v pravo
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Java - Invalid Http response

Příspěvekod Matiseli » 21 lis 2014 16:49

Zkrácený zdrojový kód:

Kód: Vybrat vše

//Opakovat, dokud nebyly projity všechny webové stránky (indexy v proměnném poli "weby"):
for(byte indexWeby = 0; weby.get(indexWeby).equals("konec") == false; indexWeby++){
try {
   inter = new Internet(weby.get(indexWeby));
   System.out.println("Vytvářím databázi dle předlohy www stránky \""+weby.get(indexWeby)+"\"");
} catch (IOException výjimka) {
   System.err.println();
   soubor.připiš(výjimka.toString(), cestaKsouboru+výjimky, "chyba zápisu!");
   return stav = false;
}

try {
   //Přidání obsahu webové stránky (html5 kódy) do Stringu:
   obsah.append(data.přečtiObsahLogicky(inter.vraťPřipojení(), musíObsahovat));
   inter = null;
} catch (IOException | URISyntaxException výjimka) {
   System.err.println("Mali");
   soubor.připiš(výjimka.toString(), cestaKsouboru+výjimky, "chyba zápisu!");
   return stav = false;
}
/**Získávání odkazů z každé webové stránky databáze:*/
//Opakovat, dokud se nezapsali všechny aplikace z databáze do daného souboru:
while(sb.obsahuje(obsah, začOdkaz) == true){   
sb.odstraňZačátek(obsah, začOdkaz);
obsah.delete(0, začOdkaz.length());
try {
   if(sb.kdyObsahuje(obsah, musíObsahovat) < obsah.length()){
      System.out.println("P 1.");
   indexApp = Short.valueOf(obsah.substring(0, sb.kdyObsahuje(obsah, "&")));
   //Pokud databáze ("má") neobsahuje vícekrát informace o stejné aplikaci:
   if(indexApp != posledníOdkaz && obsah.substring(0, sb.kdyObsahuje(obsah, konOdkaz)).endsWith("#systemrequirements") == true){
   System.out.println("Podmínka 2!");
   soubor.vytvořSoubor(celýNázSoubor);
   soubor.zapiš(obsah.substring(0, sb.kdyObsahuje(obsah, konOdkaz)).replace(musíObsahovat, "]").replace(" ", "").toLowerCase(),
               celýNázSoubor, "Výjimka!");
   posledníOdkaz = indexApp;
    inter = new Internet("http://www.game-debate.com/games/index.php?g_id="+indexApp);
    obsahHardware.append(data.přečtiObsah(inter.vraťPřipojení()));
    inter = null;
    //Naplnění Stringu pro pozdější hledání hardwarů v nich (tato akce platí pouze, když daný údaj ona webová stránka obsahuje):
       proRam.append(obsahHardware.substring(sb.kdyObsahuje(obsahHardware, začRam)));
       proCpu.append(obsahHardware.substring(sb.kdyObsahuje(obsahHardware, začCpu)));
       hdd.append(obsahHardware.substring(sb.kdyObsahuje(obsahHardware, začHdd)));
       proDirectx.append(obsahHardware.substring(sb.kdyObsahuje(obsahHardware, začDirectx)));
       System.out.println("prodir: "+proDirectx);
         os.append(obsahHardware.substring(sb.kdyObsahuje(obsahHardware, začOs)));
       proGpu.append(obsahHardware.substring(sb.kdyObsahuje(obsahHardware, začGpu)));
   
    //Zjišťování a následné přidání do StringBuilderu - pro pozdější zapsání do souboru - informace o minimální velikosti RAM.
       while(sb.obsahuje(proRam, začRam) == true){
      sb.odstraňZačátek(proRam, začRam);
      ram.add(proRam.substring(0, sb.kdyObsahuje(proRam, " GB")));
      sb.odstraňZačátek(proRam, "</span>");
      }
      proRam.setLength(0);
       //Zjišťování obsahžených grafických karet ve zdrojových kódech databáze:
      while(sb.obsahuje(proGpu, začGpu) == true){
      sb.odstraňZačátek(proGpu, začGpu);
      if(proGpu.substring(0, 250).contains(konGpu) == true){
      grafKarty.add((proGpu.substring(0, sb.kdyObsahuje(proGpu, "\" title=")).replace(začGpu, ""))+"&");
      sb.odstraňZačátek(proGpu, konGpu);
      }
      else{
      proGpu.deleteCharAt(0);
      }
      }
      proGpu.setLength(0);
      
      //Vyjmutí z databáze informací o minimalním rozhraní DirectX:
      while(sb.obsahuje(proDirectx, začDirectx) == true){   
      sb.odstraňZačátek(proDirectx, začDirectx);
      directx.add(proDirectx.substring(0, sb.kdyObsahuje(proDirectx, "</span>")));
      System.out.println("directx: "+proDirectx.substring(0, 1000));
      sb.odstraňZačátek(proDirectx, "</span>");
      }
      proDirectx.setLength(0);
      //Zjištění informace ohledně místa volného na úložném zařízení:
      if(hdd.length() > 250 && sb.obsahuje(hdd, začHdd) == true){
      sb.odstraňKonec(hdd, "</span>");
      }
      //Zjišťování informace o operačním systému:
      if( os.length() > 250 && sb.obsahuje(os, začOs) == true){
      sb.odstraňKonec(os, "</span>");
      }
   //Zjistit, zda obsah www stránky určený ve Stringu "proCpu", obsahuje pro mě nějaká užitečná data.
   while(sb.obsahuje(proCpu, konCpu) == true){
   //Vyhledávání procesorů v textovém řetězci "proCpu":
   sb.odstraňZačátek(proCpu, začCpu);

   if(proCpu.substring(0, 250).contains(konCpu) == true){
   procesory.add((proCpu.substring(0, sb.kdyObsahuje(proCpu, konCpu)).replace(začCpu, ""))+"&");
   sb.odstraňZačátek(proCpu, konCpu);
   }
   else{
   proCpu.deleteCharAt(0);
   }
}
   proCpu.setLength(0);
   procesory.trimToSize();
   //Zapsání údajů z webové stránky do určeného souboru:
   soubor.novýŘádek(celýNázSoubor);
   soubor.připiš("procesory: "+procesory.toString(), celýNázSoubor, "Výjimka");
   soubor.novýŘádek();
      soubor.připiš("grafické karty: "+grafKarty.toString(), celýNázSoubor, "Výjimka");
   soubor.novýŘádek();
         soubor.připiš("operační paměť: ", celýNázSoubor, "Výjimka");
      if(ram.size() != 0){
        soubor.připiš(ram.toString().replace(začRam, ""), celýNázSoubor, "Výjimka");
      }
        else{
        soubor.připiš("null", celýNázSoubor, "Výjimkas");   
      }
   soubor.novýŘádek();   
         soubor.připiš("nutné místo na disku: ", celýNázSoubor, "Výjimkas");
      if(hdd.length() > 0 && sb.obsahuje(hdd, začHdd) == true){
      soubor.připiš(hdd.toString().replace(začHdd, ""), celýNázSoubor, "Výjimkas");
      }
      else{
      soubor.připiš("null", celýNázSoubor, "Výjimkas");
      }
   soubor.novýŘádek();
        soubor.připiš("directx: ", celýNázSoubor, "Výjimka");
        if(directx.size() != 0){
        soubor.připiš(directx.toString().replace(začDirectx, ""), celýNázSoubor, "Výjimka");   
        }
        else{
        soubor.připiš("null", celýNázSoubor, "Výjimka");
        }
   soubor.novýŘádek();
         soubor.připiš("operační systém: ", celýNázSoubor, "Výjimka");
        if(os.length() > 0 && sb.obsahuje(os, začOs) == true){
        soubor.připiš(os.toString().replace(začOs, ""), celýNázSoubor, "Výjimka");   
        }
        else{
       soubor.připiš("null", celýNázSoubor, "Výjimkas");   
      }
   //Zvýšení indexu u proměnné "názevSouboru" pro následnou tvorbu souboru nového:
   názevSouboru++;   
   celýNázSoubor = cestaKsouboru+aplikace+File.separatorChar+(názevSouboru+".txt");
}

   hdd.setLength(0);
   os.setLength(0);
   directx.clear();
   obsahHardware.setLength(0);
   ram.clear();
   procesory.clear();
   grafKarty.clear();
   } }catch (IOException | URISyntaxException výjimka) {
   System.err.println("Výjimka!");
   výjimka.printStackTrace();
   soubor.připiš(výjimka.toString(), cestaKsouboru+výjimky, "chyba zápisu!");
   return stav = false;
}


//Pomínky sloužící pro projití i aplikací z minulých let:
if(weby.get(indexWeby).contains("year=") && rok >= rok - 14){
//Starší ročník počítačových her:
if(weby.get(indexWeby).contains("list=software") == false){
weby.remove(indexWeby);
weby.add((indexWeby), "http://www.game-debate.com/games/index.php?year="+(rok-=1));
}
//Starší ročník ostatních softwarů:
else{
weby.remove(indexWeby);
weby.add(indexWeby,"http://www.game-debate.com/games/index.php?list=software&year="+(rok-=1));
}
indexWeby -= 1;
}
//Pokud byli projity všechny aplikace daného druhu:
if(rok == (nynRok - 14)){   
rok = nynRok;
indexWeby += 1;
}
}
obsah.setLength(0);
System.out.println("SMAZÁN OBSAH!");
}
začOdkaz = null;
konOdkaz = null;
musíObsahovat = null;
začCpu = null;
konCpu = null;
začHdd = null;
začGpu = null;
konGpu = null;
začDirectx = null;
začRam = null;
začOs = null;
proCpu = null;
hdd = null;
proDirectx = null;
proRam = null;
os = null;
proGpu = null;
ram = null;
directx = null;
grafKarty = null;
obsahHardware = null;
procesory = null;
System.gc();


PS: Co máš na mysli tím "Java to umožňuje, ale aplikace ne." - Vždyť aplikace vlastně "běží" na Javě. Prosím o upřesnění.

Uživatelský avatar
domitea
Tvůrce článků
Level 4.5
Level 4.5
Příspěvky: 1971
Registrován: červen 09
Bydliště: Královehradecký kraj
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Java - Invalid Http response

Příspěvekod domitea » 21 lis 2014 20:34

No, Java sice kóduje zdrojáky v UTF-8, ale aplikace jsou většinou psané tak, že to prostě nedávají. Navíc, když něco posíláš s diakritikou nějaké jiné aplikaci (Která nemusí být napsaná v javě), tak ta diakritika může nadělat pěknou paseku ;)

Matiseli
Level 2.5
Level 2.5
Příspěvky: 381
Registrován: červen 14
Bydliště: Podíváte-li se roku 2023 na oblohu, tak na té planetě více v pravo
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Java - Invalid Http response  Vyřešeno

Příspěvekod Matiseli » 21 lis 2014 21:08

Díky za informace.
Jinak, má bádání pokročilo: Http response kód se rovná -1 (což je ovšem divné, vždy nacházím response kódy pouze v kladných číslech).

==================================================================================================================
Aktualizace: -1 response kód znamená, že nelze z URL rozeznat jakékoli kódy (připojení Http není platné).

--- Doplnění předchozího příspěvku (21 Lis 2014 21:42) ---

Kód: Vybrat vše

public int vraťResponseCode() throws IOException{
připojení = (HttpURLConnection)urlAdresa.openConnection();
return připojení.getResponseCode();   
}

Zajistí zjištění response kódu (kódu "úspěšnosti připojení").
...
Dále jsem zjistil, že zrovna ona aplikace 99 Levels To Hell má v URL adrese (za &game=)místo mezer "%". Takže, pokud použiji tuto podmínku a přilehlý blok k tomu:...

Kód: Vybrat vše

    if(inter.vraťResponseCode() == -1){
    String úpravURL = obsah.substring(0, sb.kdyObsahuje(obsah, konOdkaz)).replace(musíObsahovat, "]").replace(" ", "%").toLowerCase();
    inter = new Internet("http://www.game-debate.com/games/index.php?g_id="+úpravURL);
    }

kde String úpravURL uloží do paměti text "[číslo aplikace]&game=99%levels%to%die"

...Bezpotíží se připojím :).
Budu kdyžtak rád za každou připomínku.


Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Seznam[Bot] a 1 host