Php IdHTTPServer接收可读参数
我有一个用Delpi XE2制作的应用程序,它充当web服务器,我需要传递POST/GET变量,以便它处理em 要传递参数,我使用以下代码(php): 我得到的答复是:Php IdHTTPServer接收可读参数,php,delphi,indy,Php,Delphi,Indy,我有一个用Delpi XE2制作的应用程序,它充当web服务器,我需要传递POST/GET变量,以便它处理em 要传递参数,我使用以下代码(php): 我得到的答复是: Accesing: / Method: GET Params: data='ýýýýýýýý' 如何将其转换为可读的内容 很抱歉,如果这是一个简单的问题,第一次在delphi中运行web服务器。URL中不允许使用非ASCII字符。PHP代码告诉Curl发送UTF-8编码的URL,而不使用所需的%hh符号编码非ASCII八位字节
Accesing: /
Method: GET
Params: data='ýýýýýýýý'
如何将其转换为可读的内容
很抱歉,如果这是一个简单的问题,第一次在delphi中运行web服务器。URL中不允许使用非ASCII字符。PHP代码告诉Curl发送UTF-8编码的URL,而不使用所需的
%hh
符号编码非ASCII八位字节。Indy的默认字符集是ASCII(按设计),因此它将丢失接收到的非ASCII八位字节
在PHP方面,您必须在URL中使用或编码保留/禁止字符,CURLOPT_URL
不会为您进行编码
然后在Indy端,如果TIdHTTPServer.ParseParams
属性为True,则可以使用ARequestInfo.Params
属性访问解析和解码的数据。ARequestInfo.UnparsedParams
和ARequestInfo.QueryParams
属性包含原始未分析的数据,您必须手动解析和解码这些数据
更新
更好的选择是使用
POST
请求,使用应用程序/x-www-form-urlencoded
内容类型发送数据。允许为编码数据指定字符集的TIdHTTPServer
然后将数据解码到TIdHTTPRequestInfo.FormParams
属性中。查看curl的CURLOPT_POST
和CURLOPT_POSTFIELDS
选项以发送应用程序/x-www-form-urlencoded
格式化请求 您好,谢谢您的回答,但是如果我在发送到Delphi之前对URI进行编码,并使用ARequestInfo.Params,我会得到这个数据='ñÐÐ揋,我不知道该转换成什么。URL不支持Unicode句点。即使使用urlencoding,也无法指定编码数据(在本例中为UTF-8)使用的字符集。使用POST
请求,使用应用程序/x-www-form-urlencoded
内容类型发送数据。允许指定字符集的TIdHTTPServer
然后将数据解码到TIdHTTPRequestInfo.FormParams
属性中。查看curl的CURLOPT_POST
和CURLOPT_POSTFIELDS
选项。
procedure TMain.IdHTTPServer1CommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
Memo1.Lines.Add('Accesing: '+ARequestInfo.Document);
Memo1.Lines.Add('Method: '+ARequestInfo.Command);
Memo1.Lines.Add('Params: '+ARequestInfo.UnparsedParams);
end;
Accesing: /
Method: GET
Params: data='ýýýýýýýý'