Indy HTTP仅在字母上发送数字和停止

时间:2016-07-12 22:56:28

标签: http delphi indy lazarus

我将Indy与Lazarus一起使用

这是我的代码:

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)  ; 

如果我用一个字母开始MYCARD,服务器将获取完整的字符串。但是,如果我从一个数字开始,它会在第一个字母处停止。

MYCARD:= '12366854';     //works 

MYCARD:= 'A125ASD555';   //Works 

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

我做错了什么?

1 个答案:

答案 0 :(得分:3)

首先,您设置的两个def error(self, message): """error(message: string) Prints a usage message incorporating the message to stderr and exits. If you override this in a subclass, it should not return -- it should either exit or raise an exception. """ self.print_usage(_sys.stderr) self.exit(2, _('%s: error: %s\n') % (self.prog, message)) 属性在Request请求中毫无意义,您根本不应设置任何GET属性。

Response

其次,使用当前版本的Indy,我无法重现您的问题。 // 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); 按原样发送指定的URL,它不对其中的字符做任何假设(您负责URL编码)。在我的测试中,TIdHTTP.Get()工作正常。以下是发送的实际HTP请求:

  

GET / rest / SearchCard( 123YH963 )HTTP / 1.1
  主持人:192.168.25.965:8541
  接受:text / html,application / xhtml + xml,application / xml; q = 0.9, / ; q = 0.8
  用户代理:Mozilla / 3.0(兼容; Indy库)

如您所见,正如预期的那样,完整的123YH963文本位于请求的资源中。因此,任何截断都必须在服务器端进行,而不是在MYCARD本身。

您确定要正确格式化URL吗?你确定它应该像这样发送:

TIdHTTP

而不是更喜欢这些呢?

/rest/SearchCard(123YH963)

/rest/SearchCard%28123YH963%29

/rest/SearchCard/123YH963