THttpClientSocket token验证
THttpClientSocket
uses SynCrtSock
非WINHTTP.DLL里面的控件,可以用于手机端。
function Client(const SQL: RawUTF8): RawUTF8;
var Http: THttpClientSocket;
URI: AnsiString;
begin
if ParamCount<>0 then
URI := AnsiString(ParamStr(1)) else
URI := 'localhost';
Http := OpenHttp(URI,'888');
if Http<>nil then
try
Http.Post('root',SQL,TEXT_CONTENT_TYPE);
result := Http.Content;
finally
Http.Free;
end else
result := '';
end;
令牌验证:
procedure Tfmain.ToolButton6Click(Sender: TObject);
var
h: THttpClientSocket;
begin
h := OpenHttp('localhost','2006');
if h = nil then exit;
h.GetAuth('localhost', 'test'); // HTTP HEADER会增加 Authorization: Bearer test
h.Post('','1',TEXT_CONTENT_TYPE);
end;
服务端收到HTTP HEADER:
//'Connection: Close'#$D#$A'Content-Length: 0'#$D#$A'Accept: */*'#$D#$A'Authorization: Bearer test'#$D#$A'Host: localhost:2006'#$D#$A'User-Agent: Mozilla/5.0 (Windows; mORMot 1.18 THttpClientSocket)'#$D#$A'RemoteIP: 127.0.0.1'#$D#$A
根据这个HEADER,服务端可以验证客户端HTTP REQUEST的是否合法。
// cxg 2017-12-18
unit ufun;
interface
uses
SysUtils, Dialogs, Classes
,SynCommons, mORMotMidasVCL, SynCrtSock, SynDB, SynDBRemote, SynDBDataset, SynDBMidasVCL
;
type
TRest = class
private
procedure httpGet(const ip, port, token, indata: SockString; var data: SockString);
function urlEncodeParams(strings: TStrings): SockString;
procedure httpPost(const ip, port, token, url: SockString; params: TStrings; var data: SockString);
public
procedure getQry(const ip, port, token: SockString; const sql: RawUTF8; var data: SockString);
procedure postQry(const ip, port, token: SockString; const sql: RawUTF8; var data: SockString);
end;
implementation
{ TRest }
procedure TRest.getQry(const ip, port, token: SockString;
const sql: RawUTF8; var data: SockString);
var
indata: SockString;
begin
indata := 'query?sql=' + UrlEncode(sql);
httpGet(ip, port, token, indata, data);
end;
procedure TRest.httpGet(const ip, port, token, indata: SockString;
var data: SockString);
var
http: THttpClientSocket;
begin
http := OpenHttp(ip, port);
try
if http = nil then
Abort;
http.GetAuth(indata, token);
if http.Get(indata) = 404 then
begin
ShowMessage('404 error');
Abort;
end;
data := http.Content;
finally
if http <> nil then
http.Free;
end;
end;
procedure TRest.httpPost(const ip, port, token, url: SockString;
params: TStrings; var data: SockString);
var
http: THttpClientSocket;
begin
http := OpenHttp(ip, port);
try
if http = nil then
Abort;
http.GetAuth(url, token);
if http.Post(url, urlEncodeParams(params), TEXT_CONTENT_TYPE) = 404 then
begin
ShowMessage('404 error');
Abort;
end;
data := http.Content;
finally
http.Free;
end;
end;
procedure TRest.postQry(const ip, port, token: SockString;
const sql: RawUTF8; var data: SockString);
var
params: TStrings;
begin
params := TStringList.Create;
try
params.Add('sql=' + sql);
HttpPost(ip, port, token, 'query', params, data);
finally
params.Free;
end;
end;
function TRest.urlEncodeParams(strings: TStrings): SockString;
var
i: Integer;
S: string;
begin
for i := 0 to strings.Count - 1 do
begin
S := strings.Names[i];
if Length(strings.Values[S]) > 0 then
begin
strings.Values[S] := UrlEncode(strings.Values[S]);
end;
if Result = '' then
Result := strings[i]
else
Result := Result + '&' + strings[i];
end;
end;
end.
THttpClientSocket token验证的更多相关文章
- 服务器通过微信公众号Token验证测试的代码(Python版)
我在阿里云租了一个云服务器,然后想把这个作为我的微信公众号的后台,启用微信公众号开发者需要正确的响应微信服务器的Token验证,为此把这个验证的Python代码贴出来,只要在服务器上运行这段代码,注意 ...
- php开发公众号 token验证失败 其中一个原因
断断续续,弄了好几天,索性一狠心花了三个小时,总算找出问题了. "token验证失败" 可能原因有很多种,其他网友已经几乎穷尽了,但是我所遇到的在网络上没有看到,所以这里记录下. ...
- .NET 微信Token验证和消息接收和回复
public class wxXmlModel { public string ToUserName { get; set; } public string FromUserName { get; s ...
- 【JWT】JWT+HA256加密 Token验证
目录 Token验证 传统的Token验证 JWT+HA256验证 回到顶部 Token验证 最近了解下基于 Token 的身份验证,跟大伙分享下.很多大型网站也都在用,比如 Facebook,Twi ...
- php:微信公众号token验证失败原因、验证码显示不出来的问题
ob_clean(); 问题描述: 用微信官方提供的demo验证token是成功的,但是放到自己网站的框架上进行token验证老是提示"token验证失败",经过检查(用生成日志的 ...
- 基于.Net Framework 4.0 Web API开发(4):ASP.NET Web APIs 基于令牌TOKEN验证的实现
概述: ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题, ...
- Token验证失败
Token验证失败 微信 微信公众平台开发 Token校验失败 URL Token原文 http://www.cnblogs.com/txw1958/p/token-verify.html Token ...
- 微信公众平台Token验证失败的解决办法
微信公众平台Token验证失败的解决办法 1.可查看url和token是否正确 2.查看服务器端口是否为80端口 3.你可以通过记录log日志来判断是否接受到微信提交过来的信息 1.$fp=fopen ...
- 微信订阅号开发之token验证后,自动回复消息功能做好,发送消息没有返回
相信很多人会跟我一样,token验证之后,发送消息给订阅号,没有消息返回. 以下,说一下我辛苦调试得到的解决办法: 首先,token验证: 自己写的token一直验证失败,找了好久,没有发现bug.实 ...
随机推荐
- Linux下通过jstat命令查看jvm的GC情况
jstat命令可以查看堆内存各部分的使用量,以及加载类的数量.命令的格式如下: jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数] 注意!!!:使用的jdk版本是jdk8. ...
- Nginx-1.6.3反向代理
源码安装nginx cat /etc/redhat-release uname -rm yum install pcre-devel openssl-devel -y rpm -qa pcre pcr ...
- pom报错解决方法大全
1.Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom 解决方法: Windows: CMD --> c ...
- php上传文件常见错误
今天在文件上传过程中遇到的文件上传不过去,和网页报错,最后经查看总结有以下几个方面 上传文件错误码 error=0 正常上传 error=1 上传的大小超过了input[type=file]的文件上传 ...
- 【UI】自动化用例设计技巧
需要封装的方法: 公共的操作方法 经常使用的步骤:超过两次以上 经常使用的组件:输入框.文本框.列表 经常操作的布局:多个组件组成通用的布局 经常操作的页面:ui页面由一个一个单独Activity组成 ...
- Nuget私服使用
首先前提是师父已经搭好私服环境了(怎么搭建参考https://www.cnblogs.com/liupengblog/archive/2012/09/10/2678508.html). 然后在vs中打 ...
- cocos2dx 大地图分块加载的研究(初)
http://blog.csdn.net/dinko321/article/details/46739563 http://blog.csdn.net/u012812482/article/detai ...
- sql查询总结
1.SQL select 语句 SELECT 语句用于从表中选取数据. 结果被存储在一个结果表中(称为结果集). SELECT 列名称 FROM 表名称 实例: SELECT username,pas ...
- 性能测试篇:LoadRunner11 压力测试实例笔记
最近在学习用loadrunner做web性能测试,简单记录一下一个自学实例流程. 1.录制测试脚本 (1).打开LR11,点击create/edit Script来打开VUgen (2).点击新建 ( ...
- Word Ladder(LintCode)
Word Ladder Given two words (start and end), and a dictionary, find the length of shortest transform ...