我有一个我不知道如何解决的问题。
我有一个 Indy10 HTTP 服务器。我在许多应用程序中同时使用了 Indy9 和 Indy10 HTTP 服务器,从未遇到过任何问题。但现在我正在使用带有 ExtJS javascript RAI 框架的 Indy10 HTTP 服务器。
问题是当我提交包含非 ANSI 字符的数据时。例如,当我提交 1250 代码页(斯洛文尼亚语、克罗地亚语...)中的字母“č”时,我在 Indy 中的“未解析参数”->“%C4%8D”下得到以下内容。这是 utf-8 编码中“č”字母的正确十六进制表示。我所有的页面都是 utf-8,我在向 Indy 提交表单数据时从未遇到过任何问题。我调试了代码,发现我实际上得到了这样一个字节序列:[37, 67, 52, 37, 56, 68]。这是字符串“%C4%8D”的字节表示。但当然 Indy 无法将其正确编码为 UTF-16。所以举个例子。实际的表单域:
FirstName=črt
提交后是这样的:
FirstName=%C4%8Drt
我不知道如何解决这个问题。我查看了 ExtJS 论坛,但没有关于此主题的内容。有人知道这类问题吗?
编辑:
如果我对参数广告 JSON 进行编码,它们会正确到达。我还尝试对参数进行 URL 解码,但结果不正确。也许我错过了什么。我会再看看这个。是的,似乎 ExtJS URL 对参数进行了编码
EDIT2:
好的,我发现了更多。我比较了帖子数据的实际内容。是这样的:
Delphi 2006 (Indy10): FirstName=%C4%8D
Delphi 2010 (Indy10): FirstName=%C4%8D
在这两种情况下,未解析的参数是相同的。我在 BDS2006 中打开了 ParseParams 它们被正确解析,但在 2010 年它们不是。这是用 delphi 填充的 Indy10。这个版本有错误还是我做错了什么?
EDIT3:
我下载了 Indy10 的最新夜间构建。还是一样的问题。
EDIT4:
我不得不接受我自己的回答。
最佳答案
回答这个话题。
这在 unicode 下绝对不能正常工作。 Indy 在内部使用 unicode 字符串。问题是当参数被解码为 TStringList 时。问题是行:
Params.Add(TIdURI.URLDecode(s));
在“TIdHTTPRequestInfo.DecodeAndSetParams”中找到。它没有正确解码参数,可能是因为它正在处理 unicode 字符串。
我发现的解决方法是使用“HTTPApp.pas”中的“HTTPDecode”。
Params := TStringList.Create;
try
Params.StrictDelimiter := True;
Params.Delimiter := '&';
// parse the parameters and store them into temporary string list
Params.DelimitedText := UTF8ToString(HTTPDecode(UTF8String(Request.UnparsedParams)));
// do something with params...
finally
Params.Free;
end;
但我不敢相信这样一个常见的任务不能正常工作。有人可以确认这真的是一个错误还是我只是做错了什么?
关于javascript - Delphi indy10 http服务器和ExtJS表单提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2381017/
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou
最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除
我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
Rails中有没有一种方法可以提取与路由关联的HTTP动词?例如,给定这样的路线:将“users”匹配到:“users#show”,通过:[:get,:post]我能实现这样的目标吗?users_path.respond_to?(:get)(显然#respond_to不是正确的方法)我最接近的是通过执行以下操作,但它似乎并不令人满意。Rails.application.routes.routes.named_routes["users"].constraints[:request_method]#=>/^GET$/对于上下文,我有一个设置cookie然后执行redirect_to:ba
我正在使用Heroku(heroku.com)来部署我的Rails应用程序,并且正在构建一个iPhone客户端来与之交互。我的目的是将手机的唯一设备标识符作为HTTPheader传递给应用程序以进行身份验证。当我在本地测试时,我的header通过得很好,但在Heroku上它似乎去掉了我的自定义header。我用ruby脚本验证:url=URI.parse('http://#{myapp}.heroku.com/')#url=URI.parse('http://localhost:3000/')req=Net::HTTP::Post.new(url.path)#boguspara
require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame