判断请求是通过点击链接还是直接输入网址

本文介绍了一种判断HTTP请求是否由点击链接触发的方法,通过分析请求头中的Referer和Host字段,来确定请求是直接输入网址还是点击链接引起的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

			/**
			     * 判断请求是通过点击链接还是直接输入网址
			     * @param request
			     * @return
			     */
			    public static boolean isFromClickUrl(HttpServletRequest request){
			    	String refer = request.getHeader("Referer");
			    	String host = request.getHeader("Host");
			    	if(host != null){
			    		if(refer == null || "".equals(refer)){
			        		//此情况为在浏览器中输入地址
			        		return false;
			        	}else{
			        		String[] urls = refer.split("//");
			        		if(urls != null && urls.length > 1){
			        			String tmpHost = urls[1].substring(0,urls[1].indexOf("/"));
			            		//判断是否是从我们的主机发起的请求
			        			if(host.equals(tmpHost))
			        				return true;
			        			else
			        				return false;
			        		}
			        	}
			    	}
			    	return false;
			    }

原文链接:https://my.oschina.net/wpengfei/blog/268515

在C语言中,为了识别HTTP请求,通常会检查请求头中的特定字段,特别是"User-Agent"字段。HTTP请求包括各种头部信息,其中包含了浏览器、服务器等客户端提供的详细信息。 下面是一个简单的示例代码片段,展示了如何从HTTP请求输入流(如socket连接)读取并检查"User-Agent"字段: ```c #include <stdio.h> #include <string.h> int main() { char request[4096]; // 预留空间接收HTTP请求内容 int read_len; // 实际读取到的内容长度 // 假设已经通过某种机制(比如网络套接字)读取到了HTTP请求到request数组中 if ((read_len = strlen(request)) > 0) { char *ptr = strstr(request, "\r\nUser-Agent:"); if (ptr != NULL) { // 找到了"User-Agent:"这一行 ptr += strlen("\r\nUser-Agent:"); // 跳过"User-Agent:"部分 while (*ptr && isspace(*ptr)) // 移除空白字符 ++ptr; while (*ptr && !isspace(*ptr)) { // 找到最后一个空格或者'\n' printf("Client Agent: %c", *ptr); ++ptr; } printf("\n"); } else { printf("No HTTP User-Agent found.\n"); } } else { printf("Failed to receive the HTTP request content.\n"); } return 0; } ``` 这段代码首先通过`strlen()`函数获取HTTP请求内容的长度,并利用`strstr()`查找"User-Agent:"字符串。如果找到这个字符串,则跳过它并开始扫描直到遇到下一个空格或换行符为止,以此来提取客户端的代理信息。这只是一个基本的例子,实际处理HTTP请求可能需要更复杂的方式来解析整个HTTP报文,例如使用专门的库如libcurl或者nginx的解析器。 -
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值