Hogyan lehet *. php kiterjesztésű képet kezelni Java-ban?
Írtam egy olyan programot ami bejelentkezik egy weboldalba és letölt egy képet, csakhogy a kép kiterjesztése .php amitől meghal a BufferedImage. Mit lehetne ezzel kezdeni?
A hibát okozó programrész:
private void GetImage(String path, int x,int y, int w,int h){
try{
URL url = new URL(path);
System.out.println(ImageIO.read(url));
BufferedImage image = ImageIO.read(url);
JLabel label = new JLabel(new ImageIcon(image));
add(label);
pack();
label.setBounds(x,y,w,h);
label.setLayout(null);
}catch (Exception e){
e.printStackTrace();
System.out.println("Picture is missing.\nError: "+e.getMessage());
}
}





Nem igazán értetted meg a curl válaszomat. Pontosan ugyan azt kell megcsinálni java-ban:
- Elküldöd a bejelentkezési infót (egyszerű HTTP POST)
- Tárolod a kapott sütiket
- Lekéred a képet a sütik segítségével (egyszerű HTTP GET)
Ez Java-ban sem több pár sornál. Nem kell user-agent, nem kell content-type.
- Ebből te elküldted a bejelentkezési infót (rossz linkre),
- A sütiket valószínűleg nem tárolja a programod mert nem adtál a CookieManager-nek CookiePolicy-t,
- Nem ellenőrzöd a kódban hogy sikeresen bejelentkezett e, illetve hogy megvannak e a sütik (valószínűleg mind a kettő rossz),
- Viszont csinálsz egy csomó random dolgot aminek semmi értelme, pl beállítod a User-Agent-öt "Browser settings"-re (miféle agent ez?) de azt is rosszul, mintha random összevágtad volna különböző kódokból.
Még csak nem is strukturált a kód. Hogy kerül a bejelentkezés kódjába a kép lekérdezése? Előbb kérd le a képet majd után kiírod hogy sikeres bejelentkezés?
Ha ennyire nem érted hogy mit csinálsz (és nem tudod magadtól megcsinálni anélkül hogy mások kódját ollóznád össze) akkor használd a mások által ajánlott függvénykönyvtárat. A probléma hogy sem a HTTP kommunikáció módját nem ismered sem pedig a Java programozási nyelvet. Először legalább az egyiket tanuld meg.
"- Ebből te elküldted a bejelentkezési infót (rossz linkre),"
Jó azt már javítottam [link] -ra
"- A sütiket valószínűleg nem tárolja a programod mert nem adtál a CookieManager-nek CookiePolicy-t,"
Ott van a CookieHandler.setDefault(new CookieManager()); az elején az nem elég?
"- Nem ellenőrzöd a kódban hogy sikeresen bejelentkezett e, illetve hogy megvannak e a sütik (valószínűleg mind a kettő rossz),"
Ez igaz, de én feltételezem, hogy jó, akkor meg csak lassítaná a programot.
"- Viszont csinálsz egy csomó random dolgot aminek semmi értelme, pl beállítod a User-Agent-öt "Browser settings"-re (miféle agent ez?) de azt is rosszul, mintha random összevágtad volna különböző kódokból. "
Browser settings azt utólag írtam oda, mert egy hacker mondta hogy ne postoljam ki, mert akkor sebezhetővé válhatok.(akkor tudjátok hogyan kapcsolódok stb.)De nekem mindegy igazábol annak a helyén ez volt: "Mozilla/5.0 (Windows; U; Windows NT 6.3; en-GB; rv:46.0) Gecko/20100101 Firefox/46.0"
és igen random vágtam össze egy csomó kódot és azokból azt használom ami szerintem működik. Mivel valahogy meg kell tanulni h mi micsoda... és annak a másolás egy jó módja szerintem.
"Még csak nem is strukturált a kód." Majd Objektum Orientál lesz később.
"Hogy kerül a bejelentkezés kódjába a kép lekérdezése?"
Gondoltam dataOutputStream.close(); ez lezárja a kapcsolatot és még az előtt szeretem volna lekérni a képet.
"Előbb kérd le a képet majd után kiírod hogy sikeres bejelentkezés? "
Igaz azt, hogy kiírja azt mindjárt kiszedem mert teljesen fölösleges.
"akkor használd a mások által ajánlott függvénykönyvtárat."
Így is annyi import tom van, hogy mindenki fikázza a Javát ezért, nem kell több. Meg amúgy is milyen nyelv amihez még nekem kell hozzáadnom kódokat, hogy működjön ennyi erővel mondhatta volna, hogy: Szed le a Javát, töröld le rakd fel a Python és csináld abba.
Egyébként csak fogalmam sincs, hogy honnan kéne tudnom hogy mi annak a kódnak a neve ami nekem kéne. A tutoriállok 99% semmit se ér a [link] -tól meg agyrákot kapok annyit olvasok olyan kevés tudásért.
Ez a kód is 2-3 hetes munkám volt és ez is szar....





"Ez igaz, de én feltételezem, hogy jó [...]"
Akárhogy is, ne feltételez hogy működik a bejelentkezés ha nem működik. Ki is írja a hibát:
HTTP/1.1 401 Not Authorized
Azaz nincs jogosultságod a képhez, nem jelentkeztél be.
"[...] akkor meg csak lassítaná a programot"
Semmivel sem lesz lassabb a program, de egyelőre nem is működik, a hibát kéne megtalálnod. Ha majd működik és zavar akkor kiszedheted.
"Ott van a CookieHandler.setDefault(new CookieManager()); az elején az nem elég?"
Nem. Már leírtam, nem állítottál be CookiePolicy-t neki:
CookieHandler.setDefault( new CookieManager(null, CookiePolicy.ACCEPT_ALL));
"Browser settings azt utólag írtam oda, mert egy hacker mondta hogy ne postoljam ki, mert akkor sebezhetővé válhatok."
Az a hacker jól átvert téged mert ő nem hacker és nem válsz sebezhetővé. Vannak oldalak amik csak az ismert böngészőtípusokkal engednek be kiszűrve így a botokat, illetve vannak scriptek amik csak bizonyos böngészőkön és operációs-rendszereken működnek. Azzal hogy beállítod az User-Agent-et, azt fogja látni az oldal hogy nem egy bot vagy hanem egy böngésző, a példádban egy firefox. Sajnos a Java titokban hozzáfűzi a saját User-Agentjét is amit törölni kell előbb:
System.setProperty("http.agent", "");
Ha valaki azt állítja hogy hacker, ne higgy neki mert biztosan hazudik.
"Mivel valahogy meg kell tanulni h mi micsoda... és annak a másolás egy jó módja szerintem."
Csak abban az esetben ha érted is hogy mit csinálsz és reprodukálni tudod. De nem érted, mert akkor nem lennél itt és nem válaszolnál ilyeneket.
"Meg amúgy is milyen nyelv amihez még nekem kell hozzáadnom kódokat, hogy működjön ennyi erővel mondhatta volna, hogy: Szed le a Javát, töröld le rakd fel a Python és csináld abba."
Márpedig minden nyelv ilyen. A függvénykönyvtárak használata és különböző technológiák ismerete szerves részét képzik a programozásnak. Sok nyelvben még csak networking könyvtár sincs beépítve, neked kell beimportálnod vagy az oprendszer függvényeit hívogatnod.
"Egyébként csak fogalmam sincs, hogy honnan kéne tudnom hogy mi annak a kódnak a neve ami nekem kéne."
Persze a programozás nem olyan hogy az első programodnál már kapásból fogsz tudni mindent. Idővel megtanulod a dolgokat, addig pedig google. A lényeg hogy megértsd és tanulj, legközelebb akkor menni fog. A másolás nem számít annak. Nem hiszem hogy pár (hibás) kód összeollózásával megérted hogy hogyan működik a HTTP adatkommunikáció.
Jó, a CookiePolicy-t is beleraktam, ami gondolom ez:
De, hogy abból hogy lesz kép azt nem tudom, mivel csak szinte weboldal címeket tartalmaz.
A Hackeres dologgal kapcsolatban meg 100%, hogy hacker mondta, csak az a része nem jó, hogy nem a User-Agent-re mondta, de az mindegy.
(Amúgy nem ő mondta, hogy ő hacker csak mindenki akit ismerek, beleértve engem is.)
A másolással kapcsolatban, lemásolom, utánanézek melyik kód, mit csinál és megértem mit csinál és akkor megtanultam, persze ha rossz kódot másoltam az szívás, de az internet egy szeméttelep ahol keresgetni kell az értelmes tudás után. :(
És jó akkor ez CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL)); elfogja a Content-Security-Policy-t, de azt hogy kérem le, hogy belerakhassam az BufferedImage-be, azért hogy megjeleníthessem?
És azt főképp nem értem, hogy a doHttpPost függvényem miért nem jelentkezik be amikor már a cím is jó, ahogy valaki mondta [link]
Egyébként van működő auto-bejelentkező fügvényem, csak mivel annyi függvény hív meg hogy +15 másodperc mire lefut ez:
private void login(String websiteURL,String user,String pass)throws Exception{
WebDriver driver = new FirefoxDriver();
driver.get(websiteURL);
WebElement username=driver.findElement(By.name("username"));
WebElement password=driver.findElement(By.name("password"));
WebElement button=driver.findElement(By.className("button"));
username.sendKeys(user);
password.sendKeys(pass);
button.submit();
}
Az meg szerintem sok ahhoz képest, amit csinál.





Ok nem igazán érted amit írok. Ajánlom hogy olvass utána hogy hogyan működnek a dolgok mert így nem fogsz menni semmire se.
Az egész ennyiből áll:
CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));
login(" [link] "felhasznalonev", "jelszo");
if(!check_login()) {
System.out.println("Bad login.");
return;
}
BufferedImage captcha = get_image(" [link]
Tehát meg kell írni egy login(), opcionálisan egy check_login() és egy get_image() függvényt.
A login() csatlakozik, elküld egy POST requestet és lekérdezi a sütiket. Ha nagyon akarod akkor eljátszhatsz a HTTP fejlécekkel meg az URLEncoding-gal, de lényegében ennyi az egész:
static void login(String request, String username, String password) throws IOException {
URL url = new URL(request);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
DataOutputStream os = new DataOutputStream(conn.getOutputStream());
os.writeBytes("username=" + username + "&password=" + password);
os.flush();
os.close();
conn.getHeaderFields();
}
Ha sikerült bejelentkezni és lekérni a sütiket lesz egy member=1 sütid, illetve ha a CookiePolicy.ACCEPT_ALL be volt állítva akkor egy autologin süti is. SessionID-t mindenképpen kapsz, akkor is ha sikertelen a bejelentkezés. Annyit kell csinálni hogy a check_login()-ban végigmész a sütiken és megnézed hogy van e olyan hogy member=1 :
static boolean check_login() {
CookieManager cm = (CookieManager) CookieHandler.getDefault();
for(HttpCookie cookie : cm.getCookieStore().getCookies())
if(cookie.toString().equals("member=1"))
return true;
return false;
}
Ha van member=1 akkor be vagy jelentkezve és már kérheted is le a képed a get_image() metódusban:
static BufferedImage get_image(String request) throws IOException {
URL url = new URL(request);
BufferedImage img = ImageIO.read(url);
return img;
}
A check_login() nem kötelező, ha nem jelentkezel be rendesen úgy is elszáll a programod, de elég egyszerű megnézni... Valljuk be ez az egész nem olyan nagy ördöngösség, már le lett írva a menete és csak le kell gépelni pár sornyi kódot.
Egy-két dolognak még utána nézek, de már kezdem érteni (már működik is a program).
Köszi a segítséget, és a többiek segítségét is!
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!