消除URL中指定的参数

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

static int findfirst(char *s, char *a);
static void trimspace(char *p);
static char *url_del_args(char *url_, char *del_args_);

int findfirst(char *s, char *a)
{
	int ls,la,i;
	int flag = -1;
	ls = strlen(s);
	la = strlen(a);
	
	if (la > ls) 
		return -2;
	
	for (i=0;i<=ls-la;i++)
	{
		if(strncmp(s+i,a,la)==0) 
			return i;
	}
	return flag;
};

// 去掉空格字符
void trimspace(char *p)
{
	char *q;
	if(*p!='\0')
	 q=p+strlen(p)-1;
	else
	 return;
 
	for(;*q==' ';q--);
	
	if(*q == ' ')
		*q='\0';
		
	for(q=p;*q==' ';q++);
	
	strcpy(p,q);
	
	return;
}

char *url_del_args(char *url_, char *del_args_)
{
	static char url[256] ={0};
	memcpy(url, url_, strlen(url_));
	
	char del_args[56] = {0};
	memcpy(del_args, del_args_, strlen(del_args_));
	
	char *header = url;
	char *arg = strchr(url, '?') + 1;
	char *ender = strchr(url, ' ')+1;
	
	int header_len = strchr(url, '?') - url;
	url[header_len] = '\0';
	int arg_len = strchr(arg, ' ') - arg;
	arg[arg_len] = '\0';
	
	char arg_value[256] = {0};
		
	char* delim="&";
		
	char* p=strtok(arg,delim);		
	while(p!=NULL)
	{						
		trimspace(p);
	
		char pln[56] = {0};
		int p_en = strchr(p, '=') - p;
		memcpy(pln, p, p_en);
	
		int flag = findfirst(del_args, pln) ;
		if( flag < 0)
		{
			strcat(arg_value, p);
			strcat(arg_value, "&");
		}
		
		p=strtok(NULL,delim);			
	}	
		
	int a_v_len = strlen(arg_value)-1;	
	
	if(arg_value[a_v_len] == '&')
	{
		arg_value[a_v_len] = '\0';
	}

	if(strlen(arg_value))
	{
		strcat(url, "?");
		strcat(url, arg_value);
	}
	
	strcat(url, " ");
	strcat(url, ender);
	
	return url;
	
}	

int main()
{
	
	char *url_ = "/view/1/services.html?name=James&age=117&loca=earth HTTP/1.1\r\nHost" ;
	char *del_args_ = "name,age"; 
	
	
	char *result = url_del_args(url_, del_args_);
	
	printf("result: %s\n", result);
	
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟世者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值