首页 > 编程知识 正文

实现atoi函数,Г函数

时间:2023-05-06 14:01:39 阅读:59641 作者:3926

ngx_http_arg ()可以分析url中的参数(key=value ),

/*请求包含GET /download/nginx-1.9.2.rar? ST=xhwl 03 hbtjrojpeafid6mwe=1452139931 http/1.1的ST和e形成变量$arg_st $arg_e、value分别为

xhwl 03 hbtjrojpeafid6MW 1452139931即$arg_st=xhWL03HbtjrojpEAfiD6Mw,$arg_e=1452139931 */

ngx_int_t

ngx _ http _ arg (ngx _ http _ request _ t * r,u_char *name,size_t len,ngx_str_t *value ) )

{

u_char *p,*last;

if(r-args.len==0) ) { //args是指用户请求的URL参数。 如果没有参数,则返回

return NGX_DECLINED;

}

p=r-args.data; //p指向参数的第一个位置

last=p r-args.len; //last指向参数的最后一个位置

for(/*void ) /; p last; p ()//循环遍历

/* we need '=' after name,so drop one char from last */

p=ngx_strlcasestrn(p,last - 1,name,len - 1 );//第一个和第二个参数可以是开始指针,第三个参数可以是要查找的字符串指针,第四个参数的长度,len-1个原因来查看实现

if(p==null )//如果字符串不存在

return NGX_DECLINED;

}

if () p==r-args.data|*(p-1 )==' ' ) ) plen )=='=

value-data=p len 1; //value的data,1是等号的存在

p=ngx_strlchr(p,last,''); //符号出现的位置

if(p==null ) {

p=r-args.data r-args.len;

}

值len=p-value-data;//值的长度

return NGX_OK;

}

}

return NGX_DECLINED;

}

------------- -请参阅

/*

* ngx _ strlcasestrn (isintendedtosearchforstaticsubstring

* withknownlengthinstringuntiltheargumentlast.theargumentn

* mustbelengthofthesecondsubstring-1。

*/

/*ngx_strlcasestrn ()的目的是找出已知长度的固定子字符串,指导参数last,参数n的长度必须是第二个字符串减去1

u_char *

NGX_strlcasestrn(u_char*S1,u_char *last,u_char *s2,size_t n ) )

{

ngx_uint_t c1,c2;

C2=(ngx_uint_t ) *s2;

C2=(C2='a'C2='z '? (c2 |0x20 ) : c2;

last -=n;

do {

do {

if(S1=last ) {

返回空值;

}

C1=(ngx_uint_t ) *s1;

C1=(C1='a'C1='z '? (c1 |0x20 ) : c1;

(while ) C1!=c2 );

}while(ngx_strncasecmp(S1,s2,n )!=0;

返回--S1;

}

------------- -请参阅

//在字符串s中查找第一个出现的字符c的位置

#definengx_strchr(s1,c ) strchr ) ) const char * (S1,(int ) c ) ) ) ) ) ) )

static ngx_inline u_char *

NGX_strlchr(u_char*p,u_char *last,u_char c ) )。

{

while(Plast ) {

if(*p==c ) {

返回p;

}

p;

}

返回空值;

}

最后,列举离子

例如,请求是https://1.1.1.1/url吗? username=abcpassword=123456

分析的时候可以

ngx _ str _ targ _ username=ngx _ string (' username );

ngx _ str _ t username=ngx _ null _ string;

ngx _ str _ targ _ password=ngx _ string (' password ' );

ngx _ str _ t password=ngx _ null _ string;

/*用户名称* /

if(ngx_ok!=ngx_http_arg(r,arg_username.data,arg_username.len,username ) }

ngx_log_error(ngx_log_err,r-connection-log,0,

' get arg '%V' failed.',arg_username;

return NGX_ERROR;

}

/*密码* /

if(ngx_ok!=ngx_http_arg(r,arg_password.data,arg_password.len,password ) }

ngx_log_error(ngx_log_err,r-connection-log,0,

' get arg '%V' failed.',arg_password;

return NGX_ERROR;

}

-------------请参阅

也可以直接写

ngx_str_t * username;

ngx_str_t * password;

/*用户名称* /

if(ngx_ok==ngx_http_arg(r,(u_char* )“用户名称”,8,用户名称”) {。

}

/*密码* /

if(ngx_ok==ngx_http_arg(r,) (u_char* ) ' password ',8,password ) ) }{。

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。