Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki 1 do 10 z 13

Temat: Wysyłanie danych POSTem

  1. #1
    Zarejestrowany
    Jul 2008
    Postów
    18

    Unhappy Wysyłanie danych POSTem

    Plik test:
    Kod:
    #!/usr/bin/perl 
      use HTTP::Request::Common qw(POST);
      use LWP::UserAgent;
      $ua = LWP::UserAgent->new; 
      my $req = POST 'http://127.0.0.1/file.php',
         [ a.sd => 'wartosc' ];
      print $ua->request($req)->as_string;
    Plik file.php:
    Kod:
    <?php
    echo $_POST['a.sd'];
    ?>
    Kod nie dziala poniewaz nazwa pola przesylanego postem zawiera kropke, tak sie sklada ze pisze skrypt w ktorym jest to niezbedne. Do pliku php dociera $_POST['asd']; a nie tak jak powinno $_POST['a.sd'];
    Z gory dziekuje za pomoc.

    Edit:
    Jesli plik test zapisze w ten sposob:
    Kod:
    #!/usr/bin/perl 
      use HTTP::Request::Common qw(POST);
      use LWP::UserAgent;
      $ua = LWP::UserAgent->new; 
    $asd="a.sd";
      my $req = POST 'http://127.0.0.1/file.php',
         [ $asd => 'wartosc' ];
      print $ua->request($req)->as_string;
    To do pliku php dociera $_POST['a_sd']; co nadal nie rozwiazuje mojego problemu
    Ostatnio edytowane przez user : 08-08-2008 - 21:38

  2. #2
    Zarejestrowany
    Jul 2008
    Postów
    17

    Domyślnie

    Próbowałeś w php backslash przed kropką?

  3. #3
    Avatar eMCe
    eMCe jest offline Emil Grzegorz Gubała
    Zarejestrowany
    Dec 2006
    Skąd
    Kielce
    Postów
    1,767

    Domyślnie

    akurat z backslashem to inna bajka :)

    ogólnie kiedyś z tym powiedzmy walczyłem ;) ale ze . w formularzu to był mój wymysł a nie żadna konieczność to po porostu zmieniłem z tego co pamiętam to problem polega na tym ze Apache automatycznie zamienia . na _ jeśli występuje ona w nazwie zmiennej przesyłanej przez którąś z superglobalnych tablic.

    I tak na dobrą ( a w sumie złą :D ) sprawę nie wiem czy coś z tym zrobisz :)
    A nawet jak to by Ci się udało dojść do tego jak wyciepać to zamienianie z Apache
    to będziesz miał same problemy z tym... bo Apache wykorzystuje wyrażenia regularne a kropka w tych wyrażeniach oznacza dowolny znak i właśnie tutaj trzeba dawać wspomnianego backslasha...

    Już bym na twoim miejscu wolał sobie całego GETa rozpakować w PHP i pozamieniać _ na .

    Miłej zabawy :)
    Agencja reklamy kielce (mały kilkudniowy case pozycjonerski )

  4. #4
    Zarejestrowany
    Jul 2008
    Postów
    18

    Domyślnie

    lsadil, gdybym mial dostep do pliku php to bym ta kropke wywalil...

    eMCe, to mnie pocieszyles...

  5. #5
    rip
    rip jest offline Banned
    Zarejestrowany
    May 2008
    Postów
    534

    Domyślnie

    na cholere komplikujesz sprawe tym skryptem w pl.

    pytanie brzmi czy jest dostep do $_POST['a.sd'].
    Wg mnie nie ma, chyba zeby miec jakis dostep do servera/skryptu.

  6. #6
    Avatar eMCe
    eMCe jest offline Emil Grzegorz Gubała
    Zarejestrowany
    Dec 2006
    Skąd
    Kielce
    Postów
    1,767

    Domyślnie

    skrypt pl to wsumie nie ma tutaj nic do rzeczy :) to samo zrobi przeglądarka ;)

    problem w tym ze wrzuć sobie taki plik PHP:

    Kod php:
    <?php
    var_dump
    $_GET );
    ?>
    i odpal go np z takim parametrem:
    file.php?aa.a=aaa

    otrzymasz wynik:
    Kod:
    array(1) { ["aa_a"]=>  string(3) "aaa" }
    po prostu apache sam zmienia . na _ jeśli występuje w nazwie elementu tablicy i tyle ;) według mnie chodzi właśnie o te wyrażenia regularne :)
    Na pewno tego nie zrobili po to żeby utrudnić życie webmasterom tylko po to ze była taka potrzeba :) Trzeba by przegrzebać dokumentacje od Apache :)
    I w sumie nie ważne czy weźmiesz tą kropkę zapiszesz jako . czy jako (jak tam była kropka w hexie 2E? 2F jakoś tak i tak ją zamieni...

    Najlepiej przebudować skrypt PHP :)

    Swoją drogą tak to jest jak się nie myśli przyszłościowo o projekcie kto wymyślił kropki w zmiennych w PHP ? Owszem samemu PHP to nie przeszkadza ale jak widać jak się chce rozbudować projekt i jechać z zewnątrz to są problemy ;)
    Agencja reklamy kielce (mały kilkudniowy case pozycjonerski )

  7. #7
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Sprawdzone... po stronie Perl'a - apache dostaje asd zamiast a.sd ale rozwiazanie jest banalne i zaznaczylem w kodzie na czerwono... Przy okazji skrocilem nieco kod...

    Kod:
    use LWP::UserAgent;
    my $ua = new LWP::UserAgent;
    
    my $response= $ua->post('http://localhost/file.cgi', {
           'a.sd' => 'value1',
           param2 => 'value2',
    });
    
    print $response->content;
    Do sprawdzenia co przekazuje Perl uzylem innego skryptu ktory odpalam jako CGI na serwerku

    Kod:
    #!/usr/bin/perl
    use CGI;
    $cgi = new CGI;
    print "Content-type: text/html\n\n";
    print "Zmienne = ", join (' ',$cgi->param), "\n\n";
    i to zwraca mi

    $ ./post.pl
    Zmienne = param2 a.sd
    Jesli wysylajac POST ze skryptu w Perlu nie dam nazwy tej zmiennej w cudzyslowiach to Apache zwroci nam dalej asd - bez kropki... Dodanie pojedynczych cudzyslowiow zalatwia sprawe - Perl przekazuje na pewno dobrze, po prostu doslownie jak jest, Apache tez widzi roznice i pokazuje dalej ze dostal poprawnie a.sd i jak widac, przekazuje to do skryptow...

    JEDNAK...
    Po stronie PHP nadal nie dziala - nie zwraca nic, zupelnie tak jakby PHP nie widzialo zmiennej. Po prostu PHP nie radzi sobie (przynajmniej u mnie) z odczytaniem zmiennej majacej w nazwie kropke. Jak widac wina lezy ewidentnie po stronie php a nie apache'a ani perla.
    Ostatnio edytowane przez TQM : 08-09-2008 - 15:24
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  8. #8
    Avatar eMCe
    eMCe jest offline Emil Grzegorz Gubała
    Zarejestrowany
    Dec 2006
    Skąd
    Kielce
    Postów
    1,767

    Domyślnie

    Cytat Napisał TQM Zobacz post
    Po stronie PHP nadal nie dziala - nie zwraca nic, zupelnie tak jakby PHP nie widzialo zmiennej.
    Owszem zwraca tylko widzi pod innymi nazwami:

    Kod:
    array(2) {
      ["param2"]=>
      string(6) "value2"
      ["a_sd"]=>
      string(6) "value1"
    }
    nie umiem na tyle Perla - bo w sumie tyle umiem co widzę i sie domyślam (ale chyba się nauczę) żeby pisać skrypciki CGI ale sporo mówisz ze Apache to przemieli to widać wina PHP
    Agencja reklamy kielce (mały kilkudniowy case pozycjonerski )

  9. #9
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Ano niestety... podmiane . na _ robi PHP a nie Apache... Teraz pytanie czy da sie jakos PHP powiadomic o tym fakcie i poinstruowac (moze jakas opcja) aby takich jaj nie robilo?
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  10. #10
    Zarejestrowany
    Jul 2008
    Postów
    18

    Domyślnie

    Powiem szczerze ze chcialem napisac skrypt do automatycznego downloadowania z rapidshare... Skoro w Cpp lub podobnym jezyku udalo sie to napisac to w perlu tez musi byc to mozliwe, istnieje program USDownloader(dlatego mowie ze sie da w Cpp lub podobnym) ktory automatycznie sciaga z rapidshare ale jest tylko pod M$W:(wine to zadne rozwiazanie).

Strona 1 z 2 12 OstatniOstatni

Podobne wątki

  1. Wysyłanie danych na e-mail
    By gagashi in forum HTML/DHTML/XHTML
    Odpowiedzi: 5
    Autor: 06-06-2008, 22:14
  2. wysyłanie ciastka get'em- problem
    By ironwall in forum PHP/CGI/ASP/JSP/J2EE
    Odpowiedzi: 7
    Autor: 11-10-2007, 23:13
  3. pakiety TCP, UDP, echo, tworzenie i wysyłanie
    By gogulas in forum TCP/IP/Analiza/Badanie
    Odpowiedzi: 22
    Autor: 10-06-2007, 09:34
  4. Cafeini - wysyłanie maila
    By pierzu in forum Wirusy/Konie trojańskie
    Odpowiedzi: 1
    Autor: 09-30-2007, 16:19
  5. Typy danych
    By napek in forum Bash
    Odpowiedzi: 2
    Autor: 06-13-2007, 21:10

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj