我将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
我做错了什么?
答案 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