问题是前段时间做数据采集的时候引入的,需要下载网宿CDN的日志进行分析。但是网宿把日志下载的接口做的很复杂,并没有提供相应的sdk,只提供了一个shell脚本。虽然在ubuntu上使用很方便,但是脚本中各种重定向的分析却很复杂。因此,我想了解更多关于重定向的知识。查询网上住宿日志列表的脚本#!/bin/shTMP_FILE="/tmp/wslog_query_client.log"#UsageUsage(){echo"wslog_query_client.sh[query_url][user][passwd][start_time][end_time][channels]"return0}#checkinputparametersif[$#-eq1];那么如果[“$1”=“-h”];then用法exit0else用法exit-1fielif[$#-ne6];然后使用exit-1fi#paramsseturl=$1user=$2passwd=`echo$3|sed's/&/%26/g'`start_time=$4end_time=$5channels=$6#accesslogQuery访问APIcurl-s-D$TMP_FILE$1cat$TMP_FILE|grep“HTTP/”|grep"302">/dev/nullif[$?-ne0];然后退出-2fi#redirect与用户验证url和passwdTMP_URL=`cat$TMP_FILE|grep"位置:"|sed's/\r//'|awk'{print$2}'|sed's/http:/https:/'`TMP_URL="${TMP_URL}?u=$user&p=$passwd&channel=$channels"curl-s-k-D$TMP_FILE$TMP_URLcat$TMP_FILE|grep“HTTP/”|grep"302">/dev/nullif[$?-ne0];然后退出-3fi#redirect以查询url机智hstart_time、end_time和channelsTMP_URL=`cat$TMP_FILE|grep"位置:"|sed's/\r//'|awk'{print$2}'`TMP_URL="${TMP_URL}&start_time=$start_time&end_time=$end_time&channels=$channels"curl-s-D$TMP_FILE$TMP_URL#checkqueryresultcat$TMP_FILE|grep“HTTP/”|grep"200">/dev/nullif[$?-ne0];那么如果cat$TMP_FILE|grep“HTTP/”|grep"404">/dev/nullthenexit-404elseexit-4fifiexit0脚本调用命令及结果(用户名、密码、域、wskey已处理,调用结果仅供参考)root@sz3:/tmp#sh/root/wslog_query_client.sh"http://dx.wslog.chinanetcenter.com/logQuery/access"user1passwd12017-08-30-00002017-08-30-2359"rtmp-wsz.enterprise.com"{"logs":[{"domain":"rtmp-wsz.enterprise.com","files":[{"size":4320,"end_time":"2017-08-30-1159","start_time":"2017-08-30-0000","url":"http://dx.wslog.chinanetcenter.com/log/qukan/rtmp-wsz.enterprise.com/2017-08-30-0000-1130_rtmp-wsz.enterprise.com.cn.log.gz?wskey=e4030060bdfe9d5600a77726c5900d07aa3adae00e8b2"},{"size":8006,"end_time":"2017-08-30-2359","start_time":"2017-08-30-1200","url":"http://dx.wslog.chinanetcenter.com/log/qukan/rtmp-wsz.enterprise.com/2017-08-30-1200-2330_rtmp-wsz.enterprise.com.cn.log.gz?wskey=3772006094880e8300a73cc2c59006bfeea33ae00d9da"}]}]}脚本的调用过程是根据参数一步步进行302重定向,重定向会依赖于参数,每次重定向依赖的参数是不同的,不仅仅是url跳转。如果使用直接按照http链接是跳不过去的,需要根据shell脚本http://dx.wslog.chinanetcenter.com/logQuery/access?user=user1&passwd=passwd1&channels=rtmp-wsz逐层解析。enterprise.com&start_time=2017-08-30-0000&end_time=2017-08-30-2359HTTP重定向原理客户端发起http请求,如果服务器返回http重定向响应,则客户端将请求返回新的url。这就是重定向过程。这个过程就是重定向。它在客户端和服务器之间自动完成,对用户不可见。不同类型的重定向映射可以分为三类:永久重定向、临时重定向和特殊重定向。如果你想把自己的网站永久改成新的域名的话,就要用到301永久重定向。搜索引擎机器人遇到这个状态码会触发更新操作,修改其索引库中与该资源相关的URL。HTTP重定向的使用主要用Python和shell来介绍http重定向的使用。PythonPython常用的http库urllib、urllib2、requests都支持http重定向。以requests库为例进行介绍。importrequestsdefget_final_link(url):try:r=requests.get(url=url,allow_redirects=False)如果r.status_code==302或r.status_code==301:returnget_final_link(r.headers['Location'])否则:返回r.url除了:返回urldefget_final_link1(url):r=requests.get(url=url,allow_redirects=True)forrspinr.history:printrsp.urlreturnr.urlprintget_final_link(url='http://runreport.dnion.com/DCC/logDownLoad.do?user=user1&password=password1&domain=rtmpdist-d.quklive.com&date=20171026&hour=10')printget_final_link(url='https://github.com')printget_final_link(url='http://github.com')printget_final_link1(url='http://github.com')#如果判断所有重定向过程都是http(s)请求,就会发生301重定向,然后将allow_redirects参数设置为True以获取最终的http链接。如果没有,您需要自己进行递归解析。如果你想简单地下载一个文件,你可以使用urllib.urlretrieve来轻松完成,即使最终链接是ftp。Shell使用curl命令来模拟-L参数。当有页面跳转时,输出页面的头部信息跳转到-I参数。有跳转的时候,可以使用curl-L-IURL|grepLocation来判断跳转到新的url地址root@sz3:~#curl-L-I"http://runreport.dnion.com/DCC/logDownLoad.do?user=user1&password=password1&domain=rtmpdist-d.quklive.com&date=20171026&hour=10"HTTP/1.1302临时移动服务器:Apache-Coyote/1.1Set-Cookie:JSESSIONID=0F11668F6EBF4DC16B43E322CCF16C85;Path=/DCCLocation:http://runreport.dnion.com/logDownLoad.do?user=qukan&password=0cddcbf6d292fab5de0aas931bf19c&domain=rtmpdist-d.quklive.com&date=20171026&hour=10Content-Type:text/html;charset=GBKContent-Length:0Date:Mon,06Nov201709:46:44GMTHTTP/1.1302MovedTemporarilyServer:Apache-Coyote/1.1CDLocation:ftp://ABA60684E23D42:0687B16F2F5D0A2637FACDB23FAC982179411FA7466F10B2E7D0F4AA2D7F6AD42536F122549D0A6E40337E896@125.39.237.48:55621/rtmpdist-d.quklive.com_20171026_10_11.gzContent-Type:text/html;charset=GBKContent-Length:0Date:Mon,06Nov201709:46:44GMTLast-Modified:Thu,26Oct201702:30:13GMTContent-Length:1932Accept-ranges:bytes最后跳转到需要的ftp链接HTTP重定向抓包验证使用wireshark抓包结果如下:第一次跳转过程如下图,第二次跳转过程如下图,所以通过抓包可以清楚的看到302跳转的过程参考:常用参数csdn-curl命令的使用mozilla-HTTPRedirect记得给我点赞哦!对计算机各个方向的视频课程和电子书,从入门、进阶、实用进行了认真梳理,并按照目录进行合理分类。你总能找到你需要的学习资料。你在等什么?立即关注并下载!!!念念不忘,必有回响,朋友们,请点个赞,万分感谢。我是职场亮哥,四年工作经验的YY高级软件工程师,拒绝当领导的斜杠程序员。听我说,我进步很大。如果有幸帮到你,请给我一个【点赞】,给我一个关注,如能评论鼓励,将不胜感激。职场凉阁文章列表:更多文章我的所有文章和回答均与版权保护平台合作,版权归职场凉阁所有。未经授权转载必究!
