url截断技术巧用指针

原创 2015年11月19日 13:58:21

使用url截断的时候,我们一般希望从url得到site、port、path。这是最节省内存的方法就是巧用内存。


举个例子。一个url   :http://write.blog.csdn.net/postedit?ref=toolbar

传进来一个url,我们直接把port与path的分界线"/"的值返回path(指针),得到了path然后把"\"写成“\0”。

然后把":"后一位的数字传给port因为之前的\已经被写成\0了,所以这里能直接得到8080.再把:写成\0.

最后直接把url+7转给site就能得到  write.blog.csdn.net

至此,没有创建新的内存直接截断url。


具体实现如下:

int x_parse_url(const char *input, char *site, char *port, char *path)
00766 {
00767     char              tmp[GL_MAX_URL_LEN];
00768     char              *pin = tmp;
00769     char              *p, *q;
00770     char              *p_query = NULL;
00771     if (strlen(input) >= GL_MAX_URL_LEN)
00772     {
00773         write_log(GL_LOG_DEBUG, "x_parse_url: url is too long");
00774         return 0;
00775     }
00776     strcpy(tmp, input);
00777     x_delete_inter(tmp);
00778     if (strncasecmp(pin, "http://", 7) == 0)
00779     { pin += 7; }
00780     //get path
00781     p = strchr(pin, '/');
00782     p_query = strchr(pin, '?');
00783     if (NULL == p)
00784     {
00785         p = p_query;
00786     }
00787     if ((NULL != p_query) && (p_query <= p))
00788     {
00789         if (path != NULL)
00790         {
00791             path[0] = '\0';
00792             if (strlen(p_query) < GL_MAX_PATH_LEN - 1)
00793             {
00794                 strncpy(path, "/", 2);
00795                 strcat(path, p_query);
00796             }
00797             else
00798             { return 0; }
00799         }
00800         *p_query = '\0' ;
00801     }
00802     else
00803     {
00804         if (p != NULL)
00805         {
00806             if (path != NULL)
00807             {
00808                 path[0] = '\0';
00809                 if (strlen(p) < GL_MAX_PATH_LEN)
00810                 { strcpy(path, p); }
00811                 else
00812                 { return 0; }
00813             }
00814             *p = '\0';
00815         }
00816         else
00817         {
00818             if (path != NULL)
00819             {
00820                 strcpy(path, "/");
00821             }
00822         }
00823     }
00824     q = strchr(pin, ':');
00825     //get port
00826     if (q != NULL)
00827     {
00828         if (port != NULL)
00829         {
00830             port[0] = '\0';
00831             if (strlen(q) < GL_MAX_PORT_LEN && atoi(q + 1) > 0)
00832             {
00833                 strcpy(port, q + 1);
00834             }
00835             else
00836             { return 0; }
00837         }
00838         *q = '\0';
00839     }
00840     else
00841     {
00842         if (port != NULL)
00843         { port[0] = '\0'; }
00844     }
00845     //check if the default port
00846     if ((port != NULL) && (strncmp(port, "80", 3)) == 0)
00847     {
00848         port[0] = 0;
00849     }
00850     //get site
00851     if (site != NULL)
00852     {
00853         site[0] = '\0';
00854         if (pin[0] != '\0' && strlen(pin) < GL_MAX_SITE_LEN)
00855         {
00856             strcpy(site, pin);
00857         }
00858         else
00859         {
00860             write_log(GL_LOG_DEBUG, "x_parse_url: site name too long or empty url[%s]", pin);
00861             return 0;
00862         }
00863     }
00864     return 1;
00865 }


关于64位机指针返回截短问题

看到没有64位的指针函数返回后尽然截断了:从 0x7f3bdc001990 变为 0xffffffffdc001990, 指针前32位被重置...
  • tzwvcy
  • tzwvcy
  • 2014年03月16日 15:35
  • 1276

【转】关于64位机指针返回截短问题

这几天重构以块代码,其中有一个功能是将新创建的对象发回,遇到一个奇葩的问题,实例代码如下: GsStreamingPad* //A.c gs_encoder_create_streaming_pa...
  • vevenlcf
  • vevenlcf
  • 2014年03月28日 16:45
  • 1209

url传参,特殊字符截断问题

问题重现:   在js中利用url进行页面跳转并同时传递参数时,若在参数中存在某些特殊字符   在下一个页面获取参数时,从特殊字符处截断,之后的数据全都接收不到 解决思路:   就像特殊字符需要转...
  • wangjinlong_
  • wangjinlong_
  • 2017年05月21日 21:49
  • 642

开发日记(2015.9.8):JSON 添加URL被&截断的解决

前端获取表单数据提交时,如果字符串内容是带有参数如?\&等特殊符号的URL时,添加到JSON中会出现被截断的情况,使得最终得到的JSON异常;以下时针对两种情况的解决方式:1)用js获取替换url中的...
  • puppyand123
  • puppyand123
  • 2015年09月08日 14:43
  • 411

URL太长导致参数被截断的问题

做Web开发时经常涉及到页面之间的转跳,页面之间的转跳就会涉及到页面之间参数的传递,通过URL传递参数是常用的方法之一,但是微软说:"Maximum URL length is 2,083 chara...
  • hezudao25
  • hezudao25
  • 2013年10月29日 13:19
  • 1145

Hlong MainWndId = (Hlong) m_hWnd的用法

Hlong MainWndId = (Hlong) m_hWnd;
  • renxiangfeifelix
  • renxiangfeifelix
  • 2017年12月28日 15:05
  • 51

url被截断问题

 js中escape,encodeURI,encodeURIComponent三个函数的区别 js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相...
  • wj19266165
  • wj19266165
  • 2008年09月26日 16:42
  • 562

.net URL地址中的参数 传递汉字被截断问题解决

现象:利用Hyperlink按钮URL传递汉字参数,超过4个汉字的值会被截断。例如:“http://localhost/ECMS/front_page/sys_data_front_detail.as...
  • jlclyx
  • jlclyx
  • 2010年05月07日 08:35
  • 1107

基本数据类型强制转换问题-值的截断和内存的截断

(1)double a1=22.32;           int  b1=(int)a1; (2)double a2=2.5e20;           int b2=(int)a2; 按照...
  • r21nn
  • r21nn
  • 2017年05月21日 16:38
  • 524

\00截断

只有form post时有用,而且只针对文件名变量,作用于asp的CreateTextFile等方法。   简介   Poison NULL byte技术还没有在ASP中广泛应...
  • p656456564545
  • p656456564545
  • 2014年01月05日 14:17
  • 878
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:url截断技术巧用指针
举报原因:
原因补充:

(最多只允许输入30个字)