2016-07-12 28 views
0

Ich verwende Indy mit LazarusIndy HTTP nur Zahlen Senden und hält an Buchstaben

Hier ist mein Code:

IdHTTP1.Request.ContentType := 'text/plain' ; 
IdHTTP1.Response.ContentType := 'text/plain' ; 
IdHTTP1.Response.Charset := 'ISO-8859-1,utf-8;q=0.7,*;q=0.3' ; 
IdHTTP1.Request.CharSet:= 'ISO-8859-1,utf-8;q=0.7,*;q=0.3 ' ; 
IdHTTP1.HTTPOptions := IdHTTP1.HTTPOptions + [hoNoProtocolErrorException];  
IdHTTP1.Get('http://192.168.25.965:8541/rest/SearchCard('+MYCARD+')',Stream) ; 

Wenn ich MYCARD mit einem Buchstaben beginnen, wird der Server Kommissionierung die volle Zeichenfolge. Wenn ich jedoch mit einer Nummer anfange, bleibt sie beim ersten Buchstaben stehen.

MYCARD:= '12366854';  //works 

MYCARD:= 'A125ASD555'; //Works 

MYCARD:= '123YH963'; // The server only sees 123 

Was mache ich falsch?

+0

Es erscheint mir wie Sie versuchen Sie Javascript in der URL zu setzen ... –

Antwort

3

Zunächst einmal sind die zwei Request Eigenschaften, die Sie einstellen, in einer GET Anfrage bedeutungslos, und Sie sollten keine Response Eigenschaften überhaupt einstellen.

// get rid of these assignments 
//IdHTTP1.Request.ContentType := 'text/plain' ; 
//IdHTTP1.Response.ContentType := 'text/plain' ; 
//IdHTTP1.Response.Charset := 'ISO-8859-1,utf-8;q=0.7,*;q=0.3' ; 
//IdHTTP1.Request.CharSet:= 'ISO-8859-1,utf-8;q=0.7,*;q=0.3 ' ; 

IdHTTP1.HTTPOptions := IdHTTP1.HTTPOptions + [hoNoProtocolErrorException];  
IdHTTP1.Get('http://192.168.25.965:8541/rest/SearchCard('+MYCARD+')', Stream); 

Zweitens, mit der aktuellen Version von Indy, kann ich Ihr Problem nicht reproduzieren. TIdHTTP.Get() sendet die angegebene URL wie sie ist, sie macht keine Annahmen über die darin enthaltenen Zeichen (Sie sind für die URL-Codierung verantwortlich). In meinem Test funktioniert 123YH963 ganz gut. Hier wird die tatsächliche HTP Anfrage gesendet:

GET/rest/SearchCard (123YH963) HTTP/1.1
Host: 192.168.25.965:8541
Accept: text/html, application/xhtml + xml application/xml; q = 0,9, /; q = 0,8
User-Agent: Mozilla/3.0 (compatible; Indy-Bibliothek)

Wie Sie sehen können, die volle MYCARD Text ist in der gewünschten Ressource, wie erwartet. Also muss jede Kürzung auf der Serverseite geschehen, nicht in TIdHTTP selbst.

Sind Sie sicher, dass Sie die URL richtig formatieren? Sind Sie sicher, dass es tatsächlich so gesendet werden sollte:

Und nicht etwas mehr wie diese stattdessen?

/rest/SearchCard%28123YH963%29 

/rest/SearchCard/123YH963 

/rest/SearchCard?param=123YH963 
+0

den Code ändern zu/rest/SearchCard/123YH963 tat der Trick! – Yon