调用新浪短地址转换api的一个测试
import base64 import requests url="http://www.~~~~.com" headers={ "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) \ AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" } params={} def convert_to_bs64(url): bs64_url=base64.b64encode(url.encode("utf-8")) bs64_url=str(bs64_url,"utf-8") #print(bs64_url) return bs64_url def get_short_url(): #获得使用转化功能需要的cookies r=requests.get(url="http://dwz.wailian.work/",headers=headers) cookies=requests.utils.dict_from_cookiejar(r.cookies) #调用api获得返回 bs64_url=convert_to_bs64(url) params.update({"from":"w","url":bs64_url,"site":"1t.click"}) res=requests.get(url="http://dwz.wailian.work/api.php",\ headers=headers,cookies=cookies,params=params) #从返回中提取短地址 print(res.text) def main(): get_short_url() if __name__=="__main__": main() #>>str={"result":"ok","data":{"short_url":"http:\/\/1t.click\/s6v","title":"\u641c\u72d7\u5ba0\u7269\u5929\u4e0b - \u7231\u5ba0\u7269,\u7231\u751f\u6d3b"}}
上面代码是长转短,短转长也是一样,起码,在有cookies的情况下,浏览器输入http://dwz.wailian.work/api.php?url=aHR0cDovL3QuY24vRTlFV3J1SA==&action=restore也是可以返回结果的
ps:这个可真是花了我一点时间呢。使用requests函数,参数headers要填写cookies,这个cookies用前一个页面的cookies也是可以(我最早以为只要检查登录状态才有cookies,没想到…)
另外一个是parmas字典,要设置一个url键-值,这个值是从原始要查询的url转换过来的,我开始还以为是个md5,研究了一波md5加密解密之后,发现原来是个base64
另外,网上有关于新浪长地址转短地址算法,大概是md5之后再进行一些数值运算,但那算法是怎么来的,并不明白。而从短地址转长地址,用算法逆推就几乎是不可能的了