IdHTTP i wysyłanie danych metodą post

IdHTTP i wysyłanie danych metodą post
L1
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 12 lat
  • Postów:59
0

Witam,
według tego artykułu http://4programmers.net/Delphi/Artyku%C5%82y/HTTP piszę funkcję która przez komponent IdHTTP przekaże do skryptu php trzy zmienne metodą post, i odbierze wynik. Wszystko jest przygotowane według wzoru, ale skrypt php nie dostaje danych postem.

Kopiuj
    Input.WriteString(Format('id=%s&pass=%s&token=%s', [id, pass, NewToken]));
    Logger.Post(LoggerAddress,Input,Output);
    ShowMessage(Output.DataString);

Logger to oczywiście IdHTTP.
Danych teoretycznie wysłanych drogą post nie mogę nigdzie odnaleźć, w żadnej z tablic print_r($_POST), print_r($_SERVER) itp...
na google ciężko coś znaleźć na ten temat, bo jak metoda POST to i oczywiście PHP...

Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:prawie 13 lat
  • Postów:7923
0

co dostajesz w output?


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:2 minuty
  • Lokalizacja:Gorlice
2

Zrób na podstawie kodu poniżej ale podejrzewam, że Twój kod nie działa tylko dlatego bo nie ustawiasz ContentType.
Inne potencjalne przyczyny: tak jak poniżej najpierw GET po to by pobrać ewentualnie potrzebne ciacha, nie ustawienie Referer (niektóre strony sprawdzają).

Kopiuj
procedure TForm1.Button1Click(Sender: TObject);
const
  USER_AGENT = 'Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0';
  OGAME_URL = 'http://ogame.pl/';
  SERV_IO_LOGIN_URL = 'http://uni109.ogame.pl/game/reg/login2.php';
var
  sl: TStringList;

begin
IdHTTP1.HandleRedirects:= True;
IdHTTP1.Request.UserAgent:= USER_AGENT;
IdHTTP1.Get(OGAME_URL);
IdHTTP1.Request.Referer:= OGAME_URL;
IdHTTP1.Request.ContentType:= 'application/x-www-form-urlencoded';
sl:= TStringList.Create;
try
sl.Add('uni_id=');
sl.Add('kid=');
sl.Add('v=2');
sl.Add('is_utf8=0');
sl.Add('uni_url=uni109.ogame.pl');
sl.Add('login=test01');
sl.Add('pass=tester01');
Memo1.Text:= IdHTTP1.Post(SERV_IO_LOGIN_URL, sl);
finally
sl.Free;
end;
end;

Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
edytowany 1x, ostatnio: kAzek
KR
trafiłeś w słowo klucz: IdHTTP1.Request.ContentType:= 'application/x-www-form-urlencoded';
0

Nie rozumiem czemu to musi być metoda post. Przecież i tak nikt nie zobaczy adresu, użyj get.

Kopiuj
var S: TStringStream;
begin
  S := TStringStream.Create('');
  idHTTP1.GET('http://mojastrona.pl/skrypt.php?zmienna1=wartosc1&zmienna2=wartosc2', S);
  //Tutaj możesz odczytać te dane, np:
  Memo1.Text := S.DataString;
  S.Free;
end
KA
To nie rozwiązanie problemu tylko próba jego ominięcia.
L1
No i dane przesłane w adresie metodą GET mogą gdzieś tam zostać zapisane na serwerze choćby w głupich statystykach. A u mnie te dane są, jak nie trudno domyślić się po nazwach zmiennych, dość poufne.
L1
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 12 lat
  • Postów:59
0

w output mam dokładnie to co bym dostał bez żadnych danych w input ;) odbiera normalnie, mam kod html.
Wystarczyło że dodałem linię z ContentType i ruszyło ;) głupio mi aż teraz bo przyjrzałem się w artykule i jest tam to uwzględnione.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.