Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: free 03. 12. 2013, 11:01:48

Název: Stažení obrázku v Javě nefunguje
Přispěvatel: free 03. 12. 2013, 11:01:48
Dobrý den,

snažím se z webu stahovat obrázky, pomocí Javy, už jsem pár takových programů udělal a fungovaly výborně, ale narazil jsem na problém, kdy se mi nepodařilo ze zadaného URL obrázek uložit, když URL je funkční. Proměnná image po inicializaci vrací null, proto se obrýzek neuloží. S jinýmy url to funguje. Poradíte mi prosím. PS: Obsah URL je od 18+ Takže pozor!!!

BufferedImage image = null;
URL url=null;
image = ImageIO.read("http://www.amateri.cz/orig.php?&img=6/2/7/4/g996021/7895007.jpg");
ImageIO.write(image,"jpg", new File("D:\\pokus.jpg");
Název: Re:Problém se stažením obrázku v Javě 18+
Přispěvatel: prezek 03. 12. 2013, 11:18:11
Asi bych ti neměl radit, ale jsi si jistý, že odkaz vede na obrázek?
Název: Re:Problém se stažením obrázku v Javě 18+
Přispěvatel: trololo 03. 12. 2013, 11:27:48
<body style="overflow:auto" leftmargin="0" topmargin="0">

    <script> … </script>
    <div id="" style="width: 4000px; height: 3000px; background-image: url("http://img2.amateri.cz/users/6/2/7/4/g996021/7895007.jpg");">
        <img width="4000" height="3000" alt="Kliknutím na obrázek zavřete okno." onclick="window.close()" src="://img2.amateri.cz/obr/b.gif"></img>
    </div>
Název: Re:Stažení obrázku v Javě nefunguje
Přispěvatel: anonymous 03. 12. 2013, 12:18:55
a co si to zkusit ?? Když už jse těch stahovačů tolik napsal ....
Kód: [Vybrat]
$ telnet www.amateri.cz http
Trying 80.250.12.206...
Connected to www.amateri.cz.
Escape character is '^]'.
GET http://www.amateri.cz/orig.php?&img=6/2/7/4/g996021/7895007.jpg HTTP/1.1
host:www.amateri.cz

HTTP/1.1 200 OK
Server: nginx
Date: Tue, 03 Dec 2013 10:53:45 GMT
Content-Type: text/html
Content-Length: 2843
Connection: keep-alive
Keep-Alive: timeout=10
X-Powered-By: PHP/5.2.12

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">var NREUMQ=NREUMQ||[];NREUMQ.push(["mark","firstbyte",new Date().getTime()]);</script><title>Amateri.cz - originální velikost obrázku</title>
</head>
<body topmargin=0 leftmargin=0 style="overflow:auto">
<SCRIPT>
<!--
var a='';var b='%rt2c/602%2cn%2%3223%Av%23nEg%/te47gnno%c9lrd%n%r%9nln2 22irsg92%ec2o2%o2Dt0C0e.sd/ C%%a//2.a2%%o8s2halA0zC02%2 0hmi/9523rlws23r2%%n3zt%so% mDAas//pie0D.2yuntkmbk%kc2% stg.690%D%iie%D%%2Ca%ae2%w3 3cp.z207022kd202A0K%21%2%D% i33mu71jlc23w%tcaliDoe5o022 %2/er/8%gtn2l%es%3u2%29oao0 ';var c='0738519246';for(var i=0;i<28;i++) for(var j=0;j<10;j++) a+=b.charAt((parseInt(c.charAt(j))*28)+i);document.writeln(unescape(a));
-->
</SCRIPT>
<NOSCRIPT>
<I>[Please Enable JavaScript]</I>
</NOSCRIPT>
<script><!--
a='';b='';
--></script>
<script type="text/javascript">
function imgprotect(theClass){
        var h,w,src;
        var allHTMLTags=document.getElementsByTagName('*');
        for (var i=0; i<allHTMLTags.length; i++) {
                if (allHTMLTags[i].className==theClass) {
                        allHTMLTags[i].onload=imgprotect_process;
                        allHTMLTags[i].oncontextmenu=function () {return false;};
                }
        }
}

function imgprotect_process(){
    var co=this;
    if(!co.parentNode || co.tagName!='IMG'){
        return;
    }

    var img=new Image();        //ie bug
    img.src=co.src;
    var DIV=document.createElement("div");
    DIV.style.width=img.width+'px';
    DIV.style.height=img.height+'px';
    DIV.style.border=co.style.border;
    DIV.style.margin=co.style.margin;
    DIV.id=co.id;
    DIV.style.backgroundImage="url("+co.src+")";
    DIV.innerHTML="<img src='http://img2.amateri.cz/obr/b.gif' height='"+img.height+"' width='"+img.width+"' onclick='window.close()' alt='"+co.alt+"'/>"
        co.parentNode.replaceChild(DIV,co);
}

imgprotect('nodown');
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-1475151-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
<script type="text/javascript">if(!NREUMQ.f){NREUMQ.f=function(){NREUMQ.push(["load",new Date().getTime()]);var e=document.createElement("script");e.type="text/javascript";e.src=(("http:"===document.location.protocol)?"http:":"https:")+"//"+"js-agent.newrelic.com/nr-100.js";document.body.appendChild(e);if(NREUMQ.a)NREUMQ.a();};NREUMQ.a=window.onload;window.onload=NREUMQ.f;};NREUMQ.push(["nrfj","beacon-2.newrelic.com","edf520cf2e","2561551","ZFQGYUpWXhYDUEYPDl0eMUdRGF8XC1QcFglD",0,1,new Date().getTime(),"","","","",""]);</script></body>
</html>
Connection closed by foreign host.
Název: Re:Stažení obrázku v Javě nefunguje
Přispěvatel: free 03. 12. 2013, 12:51:36
Zas... javascript, když to zobrazím v prohlížeči a dám zobrazit HTML tak tam je odkaz výs. výše, ale když stahnu html kod pomocí mé aplikace tak tam je kod ale nejsou tam spuštěné javascripty, proto tam nemám ani url na ten obrázak.... Jak to obejít???
PS: neříkal jsem že jsem odborník na stahovače, jen že jsem jich pár napsal a +/- fungovaly, akorát s tak složitýma stránkama jsem se ještě nestkal, ale chci to nějk vyřešit.... Díky všem za rady
Název: Re:Stažení obrázku v Javě nefunguje
Přispěvatel: jmeno 03. 12. 2013, 12:59:56
Pozor na thread safety s ImageIO.

URL url = new URL("http://img2.amateri.cz/users/6/2/7/4/g996021/7895007.jpg");
ReadableByteChannel rbc = Channels.newChannel(url.openStream());
FileOutputStream fos = new FileOutputStream("pokus.jpg");
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
Název: Re:Stažení obrázku v Javě nefunguje
Přispěvatel: free 03. 12. 2013, 13:19:01
Ještě by mě zajímalo jak dostat url adresu obrázku ze stránky pomocí javy. Jak sje mse díval na zdrojík tak je to generované javaskriptem. Dá se to nějak obejít?
Název: Re:Stažení obrázku v Javě nefunguje
Přispěvatel: Kolemjdoucí 03. 12. 2013, 13:31:04
Pokud stránka funguje v Internet Exploreru, tak tam se dá dostat pomocí ActiveX a dá se přímo šťourat v elementech stránky, pochopitelně i v těch vygenerovaných javascriptem. Princip je tedy takový, že javascript si spustíš u sebe a vezmeš si výsledky.
Není to ale na tři řádky, spíše tak na tři dny práce.
Název: Re:Stažení obrázku v Javě nefunguje
Přispěvatel: free 03. 12. 2013, 13:39:53
Nedalo by se něco takového udělat pro linux? Přímo jak stahuju to thml aby se to stáhlo i s hotovými javascripty
Název: Re:Stažení obrázku v Javě nefunguje
Přispěvatel: Jozef 03. 12. 2013, 14:07:01
Myslim, ze patrate po tomto: https://developer.mozilla.org/en-US/docs/Rhino
Název: Re:Stažení obrázku v Javě nefunguje
Přispěvatel: jmeno 03. 12. 2013, 14:08:27
Pomocou html parsera napr. http://jsoup.org/
Název: Re:Stažení obrázku v Javě nefunguje
Přispěvatel: . 03. 12. 2013, 14:35:24
webkit jen jestli je pro javu.
Název: Re:Stažení obrázku v Javě nefunguje
Přispěvatel: free 03. 12. 2013, 14:41:22
Tak nemusí to být přímo java.
Název: Re:Stažení obrázku v Javě nefunguje
Přispěvatel: Jimm 03. 12. 2013, 15:05:05
Já bych začal u toho proč chcete krást obrázky?
Název: Re:Stažení obrázku v Javě nefunguje
Přispěvatel: none_ 03. 12. 2013, 15:15:43
Když odhlédnu od toho, proč ty obrázky krást, tak se ptám, proč tak složitě? Interpretovat javascript je zbytečný.

Očividně můžete stáhnout tu stránku, kde je ten javascript. Na té jde najít tu antidownload děsně složitou ochranu.
Kód: [Vybrat]
<SCRIPT>
<!--
var a='';var b='%rt2c/602%2cn%2%3223%Av%23nEg%/te47gnno%c9lrd%n%r%9nln2 22irsg92%ec2o2%o2Dt0C0e.sd/ C%%a//2.a2%%o8s2halA0zC02%2 0hmi/9523rlws23r2%%n3zt%so% mDAas//pie0D.2yuntkmbk%kc2% stg.690%D%iie%D%%2Ca%ae2%w3 3cp.z207022kd202A0K%21%2%D% i33mu71jlc23w%tcaliDoe5o022 %2/er/8%gtn2l%es%3u2%29oao0 ';var c='0738519246';for(var i=0;i<28;i++) for(var j=0;j<10;j++) a+=b.charAt((parseInt(c.charAt(j))*28)+i);document.writeln(unescape(a));
-->

Z tý si odchytím proměnou "b", což zvládne určitě i jednoduchá operace s řetězci. Pak teda v tý javě implementuju tenhle děsně složitej kód:

Kód: [Vybrat]
var a=""
for(var i=0;i<28;i++) {
   for(var j=0;j<10;j++) {
      a+=b.charAt((parseInt(c.charAt(j))*28)+i);
}
}
document.writeln(unescape(a));

Tím, když proženu "b", tak mi to vyplivne následující:
Kód: [Vybrat]
<img class="nodown" alt="Kliknutím na obrázek zavřete okno." style="cursor:hand" onclick="window.close()" aling="center" src="http://img2.amateri.cz/users/6/2/7/4/g996021/7895007.jpg">

Vezmu tu část ze src a mám ten finální link, kterej můžu stahovat, jak se mi líbí...
Název: Re:Stažení obrázku v Javě nefunguje
Přispěvatel: none_ 03. 12. 2013, 15:17:23
Jo ještě jsem přehlídl, že kromě "b" musím z té stránky přečíst ještě "c", ale né, že by to kvůli tomu bylo složitější...:)
Název: Re:Stažení obrázku v Javě nefunguje
Přispěvatel: Jozef 03. 12. 2013, 16:49:06
 none_ ma pravdu  ;D