TwojePC.pl © 2001 - 2024
|
|
A R C H I W A L N A W I A D O M O Ś Ć |
|
|
|
[JAVA] URLConnection i cookies - jak to ugryźć? , bwana 8/03/12 02:51 Problem mam następujący - chcę odczytać stronę (GET), przeczytać cookies, ustawić cookies i wysłać stronę (POST). W jedną stronę to działa, z odczytem otrzymanych cookies też nie mam problemów. Problem mam taki:
1. Kiedy przeczytam stronę (GET) i poznam wartości cookies, próbuję ustawić metodę na POST - dostaję wyjątek "Already connected" (w zasadzie przy każdej próbie użycia metod setRequestXXX())
2. Kiedy próbuję pominąć ustawianie cookies (czy czegokolwiek metodami setRequestXXX()) i wysyłam robię POST, dostaję komunikat, że nie mogę pisać do połączenia skoro już z niego czytałem.
Chodzi o to by móc programować serie operacji GET, POST, GET, POST na jednym połączeniu bez rozłączania go, tak by w międzyczasie używac setRequestProperty() i setRequestMethod(). Jak to do diaska zrobić i błagam, nie na socketach.
Pomożecie?"you don't need your smile when I cut
your throat" - Dodam, że w Perlu zajęło mi to (LWP::UserAgent) z pół godziny (wcześniej tego nie robiłem , bwana 8/03/12 03:00
ani w Perlu ani w ogóle), tylko że pierdoła jeden ma zrypaną obsługę wątków. Żeby nie było tajemnicy jakiejś - chcę uzyskać program, który:
a) sprawdzi czy dany serwer proxy żyje, czy nie
b) sprawdzi czy dany serwer proxy jest anonimowy, czy nie
Metoda jest prosta:
a) łączenie z popularny serwisem bez proxy - jeśli działa, to z tym samym serwisem przez proxy - jeśli też działa, to znaczy że proxy żyje
b) jak wyżej, ale zamiast popularnego serwisu jest serwis typu "what's my ip" - jeśli bez proxy pokazany przez serwis adres IP jest różny niż przy proxy - proxy jest anonimowy
No i wiadomo, chcę to puścić w wątkach. Po nic, w rozmowie w pracy powstało zagadnienie, dyskusja, napięcie rosło no i muszę chłopakom pokazać, że ten pomysł ma sens w praktyce:-D No a jeśli już jest know-how, pomysł i idea, to chcę sobie zrobić jako wprawkę normalne narzędzie które stabilnie działa. No zawziąłem się, nie będzie Java pluć mi w twarz:-D"you don't need your smile when I cut
your throat" - Nocna pora to człowiek bzdury pisze. Miałem zapytać o to jaką wybrać zmywarkę , bwana 8/03/12 08:37
..."you don't need your smile when I cut
your throat" - [PRYWATA] Przy okazji - czy ktoś może mi dać , bwana 8/03/12 08:38
odpowiedź na zadane pytanie?:-D"you don't need your smile when I cut
your throat" - mam Boscha, , Tummi 8/03/12 08:51
ale to nieistotne ;) Watek b. dobry :D
T.www.skocz.pl/uptime :D - Hieronima? , bwana 8/03/12 08:56
:-D"you don't need your smile when I cut
your throat"
- mam Boscha , Grocal 8/03/12 09:01
A co do meritum, to chętnie bym pomógł, ale z Javą miałem ostatni raz do czynienia na magisterce i 2 miesiące po studiach (staż w jakiejś firmie). Generalnie a) czytaj dokumentację b) kombinuj c) sprawdź czy w ramach jednego połączenia nie trzeba przestawiać jakiejś flagi, żeby traktować URLConnection do czytania (GET) lub zapisu (POST). To tylko sugestia.Na pewno, na razie, w ogóle...
Naprawdę, naprzeciwko, stąd...
Ortografia nie gryzie! - :-D , bwana 8/03/12 09:14
ogólnie to trzeba ustawić "flagę" - setRequestMethod - tylko po jakimkolwiek zapisie/odczycie nie można tego zrobić ponownie.
Dokumentacja jest do bani w tym przypadku. Nie ma w niej nawet istniejącego konstruktora do URL który pozwala na uzyskanie połączenia z proxy, jest tylko opisany konstruktor przyjmujący URI. Ten drugi (URL(protocol, proxyhost, proxyport, targethost)) znalazłem przypadkiem czytając blogi programistów."you don't need your smile when I cut
your throat"
- cycki cycki cycki , bwana 8/03/12 08:44
http://img96.imageshack.us/...vegatitsshoweran.gif"you don't need your smile when I cut
your throat" - (Prawie ;) Pierwsza linia javadoca , Quad 8/03/12 10:17
Each HttpURLConnection instance is used to make a single request but the underlying network connection to the HTTP server may be transparently shared by other instances.
Cos wiecej bym Ci napisal ale sporo roboty teraz mam :\- Kontynuujac, , Quad 8/03/12 10:19
jak potrzebujesz czegos bardziej zlozonego to pewnie Apache HttpClient bedzie lepszy. - Ok, to trochę zmienia postać rzeczy , bwana 8/03/12 15:41
(nawiasem, czytałem dokumentację na stronach Oracle, widać nieuważnie jednak). Ale tak w skrócie:
np. chcę w ramach jednego połączenia (sesji, whatever) wejść na dany link, przeczytać treść strony (cookies, hrefy) a następnie przejść do jednego ze znalezionych tam linków i znów przeczytać jego treść. Bez rozłączania połączenia. Jak to należy zrobić?
BTW. Dzięki za odzew:-D"you don't need your smile when I cut
your throat"
- No wiec , Quad 8/03/12 16:46
musialem sie odezwac skoro nikt sie wczesniej nie wychylil ;)
Ogolnie, to wydaje mi sie, ze wystarczy zrobic kilka kolejnych HttpUrlConnection'ow (raczej pamietajac o zamykaniu poprzednich), tylko trzeba zadbac o to, zeby w kazdym byl dolaczony identyfikator sesji, ktory sie dostanie z servera - to jesli chodzi o utrzymanie sesji. W swiecie javy to sie najczesciej nazywa JSESSIONID i jest dolaczane do header'ow zapytania (no ale szczegoly zaleza od serwera).
Jesli chodzi o utrzymanie polaczenia (tcp) to jest poziomi nizej i wydaje mi sie, ze to HttpUrlConnection zalatwia za twoimi plecami (uzyje tego samego polaczenia kilkukrotnie chyba ze mu tego explicite zakazesz). Tutaj troche o tym pisza:
http://docs.oracle.com/.../net/http-keepalive.html
http://stackoverflow.com/...-one-httpurlconnection
Ogolnie to hasla http keep-alive i peristent connections.- brzmi sensownie , bwana 8/03/12 18:34
słowem między każdym disconnectem raz wysyłam i raz odbieram (zawsze w tej kolejności) za każdym razem odbudowując przechowany "gdzieś na boku" stan sesji. Przećwiczę, zdam relację dla potomnych, dzięki!:-D"you don't need your smile when I cut
your throat" - Ja robiłem takie rzeczy b. łatwo w PHP , pachura 8/03/12 19:34
Używając funkcji CURL:
http://www.php.net/...al/en/function.curl-exec.php
Napisałem sobie skrypt który co jakiś czas loguje się do naszej aplikacji webowej a potem sprawdza czy w treści strony jest jakiśtam substring. Jeśli nie, wysyła maila że coś się wywaliło. Identyfikator sesji w cookie był między kolejnymi requestami zachowywany.- toż w php nie ma problemu, podobnie jak w perlu, ale challenge był żeby w Javie , bwana 9/03/12 00:04
Nawiasem, Quad wyprostował moje wypaczenia i działa:-)
Dodatkowo, i tu widać przewagę Javy, zajętość pamięci przy 50 workerach w Javie to ok 80MB, w Perlu było to prawie 400MB. Zużycie procesora też w przypadku Javy jest jednak znacznie mniejsze niż w Perlu. No i przede wszystkim nie wypieprzają się wątki, a głównie o to chodziło. I sprawa rozwiązana, można zapomnieć:-D
Dzięki za porady, naprowadzania i wszelką inną pomoc. Mam też nadzieję, że cycki pod linkiem się podobały;-D"you don't need your smile when I cut
your throat" - Hehe, , Quad 9/03/12 11:19
ciesze sie, ze dziala :) Z java tak jest, ze jest wiele "lepszych" jezykow (w takim sensie, ze mozna w nich pewne rzeczy zrobic latwiej, szybciej, krocej i sensowniej :) ale ma te zalete, ze jest dojrzala (chociazby te watki ;)- zgadza się, już widzę, że w porównaniu z językami skryptowymi, tu nie da się nastrugać , bwana 9/03/12 22:02
kawałeczka kodu na kolanie. Ale też nie do tego, tylko do dużych projektów programistycznych, Java powstała.
Nadal jednak upieram się, że do przetwarzania plików tekstowych Perl jest niewyjęty:-D"you don't need your smile when I cut
your throat"
|
|
|
|
|
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL |
|
|
|
|