Skocz do zawartości

Synapse, HTTP POST i nieprawidłowe odpowiedzi z serwera


gienek

Polecane posty

Cześć,

Mam taki programik pisany w Lazarusie, który generuje sumę MD5 pliku, następnie wysyła tę informację na serwer do skryptu PHP metodą POST.

 

Problem w tym, że w programie dostaję odpowiedź że żądanie jest nieprawidłowe, zaś gdy wklepię w przeglądarce identyczny adres URL, to dostaję prawidłową odpowiedź.

 

Czy ktoś mógły mi jakoś poradzić? To moje pierwsze zetknięcie się z Synapse i być może robię coś źle.

 

if (HttpPostURL(url, Parametry, Odpowiedz)) then  
 	Odpowiedz.SaveToFile('E:\rezultat.txt');     

Link do komentarza
Udostępnij na innych stronach

Nie korzystałem nigdy z synapse. Tu jest niby najprostrzy przykład właśnie wysłania takiego zapytania: http://stackoverflow.com/questions/6291381/how-to-send-http-data-and-get-response-with-synapse-delphi

 

Pierwsze co może mi się nasuwać to to, że może przy parametrach nie korzystach z tej ich funkcji: EncodeURLElement ?

 

Daj więcej kodu może też to ktoś coś poradzi. Bo w tej jednej linijce, której dałeś to błędu nie ma.

Ot taka mini-strona moja po godzinach :)http://www.wnetrzekuchni.pl

Link do komentarza
Udostępnij na innych stronach

Zrobiłem tak jak jest w tym przykładzie i...

if (OpenDialog1.Execute) then
 begin
PathToFile:=OpenDialog1.Filename;
Label2.Caption:=PathToFile;
FileHash := MD5Print(MD5File(PathToFile));
Response := TMemoryStream.Create;
try
 	url:='http://threatcenter.crdf.fr/API.php?HashSeek&';
 	Params := 'V=' + EncodeURLElement(FileHash) +
         	'&HashType=md5&ReturnType=phpb';

 	if (HttpPostURL(url, Params, Response)) then 
 	Response.SaveToFile('E:\response.txt');
finally
Response.Free;
end;
 end;

Normalnie powinienem dostać w pliku response.txt taki komunikat:

OK1CRDF.EICAR.Test.File.NOT.a.Virus120044d88612fea8a8f36de82e1278abb02f3395856ce81f2b7382dee72602f798b642f141401271601541

a dostaję:

ERROR: invalid data ReturnType. Please chose variable ReturnType between : json (array javascript) / phpb (array php serialize) / xml.

Próbowałem z xml (czyli ta pojedyncza linia tekstu jak w przykładzie powyżej), ale to samo :/

Link do komentarza
Udostępnij na innych stronach

Musisz wysłać niemal identyczne dane, jakich oczekuje skrypt php poprzez metodę POST. Czy jesteś autorem tego skryptu? Jeżeli można do niego słać pliki też przez jakąś prawdziwą stronę www, to polecił bym przeanalizować debuggerem HTTP lub snifferem, co jest wysyłane i postarać się wysłać identyczne dane z pod Synapse. Ja z POST'owaniem nie miałem nigdy pod Synapse większych problemów. W moim artykule na: http://4programmers.net/Delphi/Artykuły/Obsługa_protokołu_HTTP_przy_użyciu_pakietu_Synapse jest wszystko opisane. Polecał bym słać dane POST'em przez utworzony obiekt klasy THttpSend i merodę: HTTPMethod('POST', Url); bo masz większą kontrolę nad własnościami obiektu, niż to co oferuje gotowa funkcja.

Pozdrawiam: olesio

Link do komentarza
Udostępnij na innych stronach

Tak sobie czytam ten temat i może to będzie pomocne o ile jest to podobne do tech. AJAX.

Otóż swego czasu miałem problem z odpowiedzią serwera, bo miał np. dać tekst: 'nie' i mimo, że się tak działo, że serwer na 100% miał zwrócić ten łańcuch to porównanie if($odp == 'nie') było ciągle false.

Problemem okazało się to, że strona była na darmowym serwerze, a ten generował swoje ,,głupoty'' w postaci reklam i rozwiązanie tego problemu polegało na otoczeniu odpowiedzi w np 123\r\n MOJA ODP 123\r\n i potem w js odp = odp.split("123\r\n");

Jeżeli to nie to, to proszę się nie denerwować, chciałem pomóc :)

Galeria przyrodnicza http://fotokrajobrazy.warmia.pl

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...