Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php IdHTTPServer接收可读参数_Php_Delphi_Indy - Fatal编程技术网

Php IdHTTPServer接收可读参数

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八位字节

我有一个用Delpi XE2制作的应用程序,它充当web服务器,我需要传递POST/GET变量,以便它处理em

要传递参数,我使用以下代码(php):

我得到的答复是:

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='ýýýýýýýý'