gpt4 book ai didi

php - IdHTTPServer接收可读参数

转载 作者:行者123 更新时间:2023-12-03 19:41:35 38 4
gpt4 key购买 nike

我有一个用Delpi XE2制成的应用程序,它充当网络服务器,我需要传递POST / GET变量才能处理em。

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html charset=utf-8" />
</head>
<?php
$url = "http://85.59.95.216:8080?data='тест'";
$timeout = 10;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_close($ch);
?>


然后在delphi中:

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


如何将其转换为可读性?

抱歉,如果这是一个简单的问题,那么第一次使用Delphi创建Web服务器。

最佳答案

URL中不允许使用非ASCII字符。您的PHP代码告诉Curl发送UTF-8编码的URL,而不以必需的%hh表示法对非ASCII八位字节进行编码。 Indy的默认字符集是ASCII(根据设计),因此它将丢失接收到的非ASCII八位字节。

在PHP方面,您必须使用curl_escape()urlencode()来编码URL中的保留/禁止字符,而CURLOPT_URL不会为您进行这种编码。

然后在Indy端,如果ARequestInfo.Params属性为True,则可以使用TIdHTTPServer.ParseParams属性访问已解析和解码的数据。 ARequestInfo.UnparsedParamsARequestInfo.QueryParams属性包含您必须手动解析和解码的原始未解析数据。

更新资料
更好的选择是使用POST请求使用application/x-www-form-urlencoded内容类型发送数据。这样就可以为编码数据指定一个字符集。然后TIdHTTPServer将数据解码为TIdHTTPRequestInfo.FormParams属性。查看curl的CURLOPT_POSTCURLOPT_POSTFIELDS选项,以发送application/x-www-form-urlencoded格式的请求。

关于php - IdHTTPServer接收可读参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20706625/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com