Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]
Forum PHP.pl > Forum > Przedszkole
kkthxbb
Czy ktos wie w jaki sposob mozna wywolac submit bez okreslonego atrybutu name dla niego przez curl'a? Formularz jest przesylany metoda post.

Nie wiem czy w ogole cos takiego jest mozliwe, ale warto sie spytac, moze ktos podpowie biggrin.gif

Pozdrawiam
Crozin
Chcesz wysłać forumlarz przy pomocy CURLa? Więc robi się to nieco inaczej:
  1. <?php
  2. function createPostString($aPostFields) { 
  3. foreach ($aPostFields as $key => $value) { 
  4. $aPostFields[$key] = urlencode($key) . '=' . urlencode($value); 
  5. } 
  6. return implode('&', $aPostFields); 
  7. }
  8.  
  9. $ch = curl_init('http://strona.pl/'); //adres strony do ktorej prowadzi formularz
  10. curl_setopt($ch, CURLOPT_POSTFIELDS, createPostString(array('pole1' => 'wartosc1', 'pole2' => 'wartosc2'))); 
  11. curl_exec($ch); 
  12. curl_close($ch);
  13. ?>
nevt
po stronie php (serwer) nie wywołasz ŻADEGO submita... to można zrobić w przeglądarce (klient) ręcznie albo w JS. jeżlei to jedyny formularz na stronie, to wyśle go wywołanie w JS:
Kod
document.getElementsByTagName('form')[0].submit;

jeżeli o to chodziło, to popraw tag w temacie...
kkthxbb
nevt - tylko jak mam polaczyc to co napisales z curlem ?

Crozin - nie widze, zebys wywolywal jaki kolwiek submit, ktory to uruchamialby ten formularz... (ale moze zle widze)

Powiem w czym rzecz, zeby rozwiaz wszelkie watpliwosci, chce zbierac dane ze strony na ktora trzeba sie zalogowac (dane dostaje po zalogowaniu sie) - sek w tym, ze input type submit nie ma wartosci name i to jest jedyny problem.

nevt jestes pewien, ze nie wywolam submita - testowalem u siebie na serwerze na prostym skrypcie do logowania (ktory mial okreslony name dla submit'a) i dzialalo. Problem wlasnie w tym, ze na tej stronie na ktora chce curla submit nie ma name i nie mam sie jak do niego odwolac :/
Crozin
Ale wysyłając formularz (przez curla) nie ma żadnych submitów czy czegoś takiego.

Poprostu - sprawdzasz do jakiego adresu kieruje formularz (parametr action="...", np.: http://stona.pl/login.php) - jak wysłać dane _POST widzisz w moim przykładzie

PS. jeżeli chcesz się zalogować przy użyciu curl'a musisz jeszcze włączyć obslugę ciastek w nim
nevt
niestety, ale nadal nie rozumiem co chcesz osiągnąć. ALBO wysyłasz formularz z przeglądarki przez SUBMIT (nieważne "ręcznie" czy w JS) ALBO wysyłasz formularz z serwera PHP używając CURL (wtedy nie potrzeba żadnego submita). Albo rybki, albo akwarium - zdecyduj się, co chcesz osiągnąć. albo jeszcze dokładniej opisz nam swój problem... a na marginesie atrybut name submita ma znaczenie tylko przy kilku submitach w jednym formularzu i nie ma kompletnie żadnego związku z CURL...
kkthxbb
Ok to moze napisze jak wyglada formular do logowania, bo chyba tak bedzie prosciej:
Kod
<form id="loginForm" name="loginForm" action='#' onsubmit="changeAction('login');" method="POST">
<td><input id="login" name='name' type="text" class="login"  /></td>
<td><input id="pwd"  name='password' type="password" class="pass"  /></td>
<td><input type="submit" class="button" value="Zaloguj" /></td>


Skrypt JS, ktory uzywany jest tutaj wyglada tak:

Kod
<pre id="line12">function changeAction(type) {    
              if (type != "register" && document.loginForm.universe.value == '') {
                  alert('Kein Uni ausgewählt');
              } else {
                  if(type == "login") {
                      var url = "http://" + document.loginForm.universe.value + "/index.php?action=loginAvatar&function=login";
                      document.getElementById('loginForm').action = url;        
                  } else if (type=="getpw") {
                      var url = "http://" + document.loginForm.universe.value + "/game/reg/mail.php";
                      document.loginForm.action = url;
                      document.loginForm.submit();
                  } else if(type == "register") {
                      var url = "http://" + document.registerForm.universe.value + "/index.php?action=newPlayer";
                      document.registerForm.action = url;
                  }
              }
          }</pre>


No i w zasadzie ten JS mi tu utrudnia to co chce zrobic :/
nevt
a nie wystarczy ci powprawić HTML questionmark.gif tzn. wywal ze znacznika FORM onsubmit="..." a do action="#" zamiast # wstaw adres swojego skryptu / strony do którego chcesz się logować...
Sabistik
No i w czym masz problem ? Pokaż jak wykorzystujesz curla do zalogowania się.
kkthxbb
Kod
<?
$url ="http://ikariam.pl/index.php?action=loginAvatar&function=login";
$ch = curl_init();    
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt ($ch, CURLOPT_COOKIEJAR, '/temp/cookie.txt');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "name=xxx&password=xxx");
ob_start();    
curl_exec ($ch);
ob_end_clean();
curl_close ($ch);
unset($ch);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_COOKIEFILE, "/temp/cookie.txt");
curl_setopt($ch, CURLOPT_URL,"http://s1.ikariam.pl");
$result = curl_exec ($ch);

curl_close ($ch);
echo $result;
?>


Tak to sobie wymyslilem, ale jednak nie za bardzo dziala :/ (przerobka gotowego skryptu)
nevt
opisz dokładniej, co chcesz tym kodem osiągnąć ...
z tego co widzę, to najpierw wywołujesz skrypt logowania na stronie ikariam.pl
a potem nie wiadomo po co pobierasz przez curl zawartość subdomeny s1.ikariam.pl
nie bardzo widzę w tym sens ...

wygląda to trochę podejrzanie, jakbys komuś próbował włamać sie na serw ...
kkthxbb
Najpierw wywoluje http://ikariam.pl/index.php?action=loginAv...;function=login
Loguje sie, pobieram ciacho

Nastepnie laduje http://s1.ikariam.pl
To jest defaultowa strona po zalogowaniu (oznacza, ze uzytkownik zalogowal sie na pierwysz serwer)

Nigdzie nie chce sie wlamac (przeciez mam login i haslo) - chce sie dostac na strone po zalogwaniu i zrzucic dane do mysql i pozniej ja obrabiac na wlasne potrzeby...
nevt
przecież ciacha są "dowiązane" do domeny, a ty zmieniasz w trakcie operacji domenę... dlaczego nie zrobisz tego na sesji... ? i po co ci w tym wszystkim CURL? czy twój skrypt logowania nie może po weryfikacji przeładować / przekierować do odpowiedniej strony?

poza tym prezentujesz skrypt w JS który "utrudnia ci" zadanie... skoro "utrudnia" - to znaczy że nie jest twój ... a to nie wygląda na logowanie sie do własnych zasobów ...
kkthxbb
Nie wiem jaki Ty tu spisek weszysz naprawde ;]

www.ikariam.pl - gra przez przegladarke. Chce zrobic baze danych wysp i graczy w tej grze... co w tym nielegalnego ?
nevt
a to, że normalna komunikacja wewnątrz hosta do którego masz normalne uprawnienia nie wymaga używania CURL, który z założenia jest narzędziem do komunikacji między różnymi hostami. no i sam prezentujesz fragmenty skryptów które były przeznaczone dla zagranicznej domeny które próbujesz 'nagiąć' do polskiej wersji (no bo chyba nie robisz tej gry po niemiecku). mi to wygląda raczej na próbę napisania bota do jakiejś gry, który zaloguje się i będzie za ciebie grał w nocy ... no chyba ze jesteś właścicielem domeny i gry na ikariam.pl - wtedy nie mam zastrzeżeń ...

ja osobiście nie cierpię cziterstwa w żadnej postaci...

EDIT: dla spokoju sumienia sprawdziłem OWU gry:
Cytat
(II) Zabronione programy
Zabroniony jest dostęp do strony gry przy użyciu jakichkolwiek innych programów poza przeglądarkami internetowymi. Dotyczy to w szczególności tzw. botów, a także innych narzędzi, które symulują, zastępują lub uzupełniają interfejs strony. Ponadto zabrania się używania skryptów oraz całkowicie lub częściowo zautomatyzowanych programów, które dają użytkownikowi przewagę nad innymi graczami. Do tego zalicza się także kompletnie lub częściowo zautomatyzowane programy, które umożliwiają samoaktualizację (auto-refresh), oraz inne dodatkowe mechanizmy, które nie są zintegrowane fabrycznie z przeglądarkami internetowymi. Korzystanie z jakichkolwiek programów wyłączających reklamy jest zabronione. Nie ma znaczenia, czy reklama blokowana jest celowo, czy generalnie przez program blokujący pojawianie się okienek pop-up, przeglądarkę tekstową, czy inne podobne funkcje. Jedyny wyjątek stanowią użytkownicy, którzy otrzymali oficjalną zgodę ze strony Gameforge.

zamykam temat
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.