delphi使用idhttp.post登录时网页使用gbk编码,但是idhttp自动将数据用utf-8编码。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi使用idhttp.post登录时网页使用gbk编码,但是idhttp自动将数据用utf-8编码。相关的知识,希望对你有一定的参考价值。
主要代码如下:
HTTP.Request.UserAgent := '';
res := TMemoryStream.Create;
postData := TStringList.Create;
HTTP.Request.ContentType := 'application/x-www-form-urlencoded';
HTTP.Request.CharSet := 'GBK';
HTTP.Request.UserAgent := 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)';
HTTP.HandleRedirects := true;
postData.Add('TPL_username=XXXXXX); //这里使用中文
postData.Add('&TPL_password=xxxxxxx);
postData.Add('&action=Authenticator');
postData.Add('&event_submit_do_login=anything');
HTTP.Post('https://login.taobao.com/member/login.jhtml', postData, res);
还试了将HTTPOptions的hoForceEncodeParams设为false,然后postData.Add('TPL_username=‘【转换好的字符串】’);,也不行。
改用Tstringstream还是不行。
HTTP.Post('https://login.taobao.com/member/login.jhtml', postData, res);
postData.SaveToFile('xxx.txt');
看了一下postData倒是对了,保存出来的串直接复制到地址栏里就能登录,但用我写的客户端就登录不了。我的这段登录代码有什么问题么?
然后postData.writestring();添加参数
idhttp.post方式 调用datasnap rest 远程方法(转咏南兄)
idhttp.get方式调用,这种比较简单,大家都会。post方式网上却没有任何成功的代码,本人也是摸索了一个上午才搞定。
分享给大家。
(1)post方式调用的远程方法,方法名必须加“update”前缀,不加行不?你试下啦。
function TServerMethods1.updateecho(const value: String): String;
begin
Result := value;
end;
(2)客户端调用,参数必须是JSON格式的字符串。 客户端POST方式调用时,远程方法名必须去掉“update”前缀字符串,DATASNAP似乎不讲道理。
procedure TForm1.Button1Click(Sender: TObject);
var
url:string;
param:TStringStream;
begin
url:=‘http://localhost:8080/yn/rest/TServerMethods1/echo/‘;
param := TStringStream.Create;
param.WriteString(‘"demo"‘);
Caption := http.Post(url,param);
param.Free;
end;
以上是关于delphi使用idhttp.post登录时网页使用gbk编码,但是idhttp自动将数据用utf-8编码。的主要内容,如果未能解决你的问题,请参考以下文章
delphi2010 idhttp post 中文问题;不能提交中文字符,很郁闷
idhttp.post方式 调用datasnap rest 远程方法