python调用wget下载ftp或https的文件,需要验证用户名和密码,但用户名包含特殊字符时,大家咋处理的?

iceelee 2015-10-22 04:31:05
重点:有个https网站需要登录后才能下载他的文件,并且登录的用户名或密码中包含了@或:字符。用wget如何下载呢?

简单的情况:
比如有个ftp文件我要下载,这个ftp需要登录。
用户名是:testuser
密码是:testpass
文件地址是:ftp://127.0.0.1/file/bin.rar
用wget下载时直接一句搞定: wget ftp://testuser:testpass@127.0.0.1/file/bin.rar

这种组合式的URL中,就直接包含了登录的账号和密码,格式就是ftp://用户名:密码@地址

但这样有一个弊端:
当用户名为test@user
登录密码为test:pass
如果写成wget ftp://test@user:test:pass@127.0.0.1/file/bin.rar
里面的多个@特殊符号,会引起歧义了。

看wget的帮助文档,有一段信息:
FTP options:
--ftp-user=USER set ftp user to USER.
--ftp-password=PASS set ftp password to PASS.
--no-remove-listing don't remove `.listing' files.
--no-glob turn off FTP file name globbing.
--no-passive-ftp disable the "passive" transfer mode.
--retr-symlinks when recursing, get linked-to files (not dir).
--preserve-permissions preserve remote file permissions.

所以问题解决了,可以这样来写 wget --ftp-user="test@user" --ftp-password="test:pass" 127.0.0.1/file/bin.rar

但对于需要用户名和密码登录的https的网站,wget就没有提供可以输入用户名和密码的参数了。
比如我在网上找的这个地址:https://tools.cisco.com/CCIE/Schedule_Lab/CCIEOnline/jsp/UpdateProfile_Form.jsp
用wget下载这个文件时,如果用户名和密码不包含特殊字符,可以直接这样:
wget --no-check-certificate https://testuser:testpass@tools.cisco.com/CCIE/Schedule_Lab/CCIEOnline/jsp/UpdateProfile_Form.jsp
这样就能下回这个jsp文件了。

但是如果用户名或密码包含@或:这样的特殊字符,这样拼接就不行了。
有没有哪位知道这种情况如何解决呢?
...全文
1856 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
willhuo 2015-10-23
  • 打赏
  • 举报
回复
引用 4 楼 iceelee 的回复:
[quote=引用 3 楼 willhuo 的回复:] [quote=引用 2 楼 iceelee 的回复:] [quote=引用 1 楼 willhuo 的回复:] 虽然现在还是py新手,有个比较靠谱的方式就是抓包 1. 先正常抓包,看看特殊字符是怎么处理的,是进行转义还是编码。 2. 对自己的软件进行抓包,与先前的抓包进行数据对比。
引用 1 楼 willhuo 的回复:
虽然现在还是py新手,有个比较靠谱的方式就是抓包 1. 先正常抓包,看看特殊字符是怎么处理的,是进行转义还是编码。 2. 对自己的软件进行抓包,与先前的抓包进行数据对比。
用IE登录之后再下载,访问下载页面时,会发送登录时获取的cookie。 但用wget,没法让他提前登录获取cookie呢。[/quote] cookie是网站基本的一些策略。 1. 首先你在用IE访问相应页面的时候,这个时候cookie就已经开始获取了,等到你登陆的时候,会附带这个cookie,一并发送给服务器。你可以模拟IE操作的整个过程,IE怎么做的,程序就怎么做,注意是从IE访问登陆地址开始的。[/quote] 关键是wget是一个只提供参数调用的程序,没法让他去模拟登录后保留cookie..... 如果需要人工干预获取cookie后,再用wget指定发什么样的cookie, 那现在就要解决如何获取cookie的问题了。 [/quote] 条条大路通罗马,你可以换个方式嘛,py里边这么多都可以进行网络编程,urllib,utllib2,beautifulsoul等等一大摞
iceelee 2015-10-23
  • 打赏
  • 举报
回复
引用 3 楼 willhuo 的回复:
[quote=引用 2 楼 iceelee 的回复:] [quote=引用 1 楼 willhuo 的回复:] 虽然现在还是py新手,有个比较靠谱的方式就是抓包 1. 先正常抓包,看看特殊字符是怎么处理的,是进行转义还是编码。 2. 对自己的软件进行抓包,与先前的抓包进行数据对比。
引用 1 楼 willhuo 的回复:
虽然现在还是py新手,有个比较靠谱的方式就是抓包 1. 先正常抓包,看看特殊字符是怎么处理的,是进行转义还是编码。 2. 对自己的软件进行抓包,与先前的抓包进行数据对比。
用IE登录之后再下载,访问下载页面时,会发送登录时获取的cookie。 但用wget,没法让他提前登录获取cookie呢。[/quote] cookie是网站基本的一些策略。 1. 首先你在用IE访问相应页面的时候,这个时候cookie就已经开始获取了,等到你登陆的时候,会附带这个cookie,一并发送给服务器。你可以模拟IE操作的整个过程,IE怎么做的,程序就怎么做,注意是从IE访问登陆地址开始的。[/quote] 关键是wget是一个只提供参数调用的程序,没法让他去模拟登录后保留cookie..... 如果需要人工干预获取cookie后,再用wget指定发什么样的cookie, 那现在就要解决如何获取cookie的问题了。
willhuo 2015-10-23
  • 打赏
  • 举报
回复
引用 2 楼 iceelee 的回复:
[quote=引用 1 楼 willhuo 的回复:] 虽然现在还是py新手,有个比较靠谱的方式就是抓包 1. 先正常抓包,看看特殊字符是怎么处理的,是进行转义还是编码。 2. 对自己的软件进行抓包,与先前的抓包进行数据对比。
引用 1 楼 willhuo 的回复:
虽然现在还是py新手,有个比较靠谱的方式就是抓包 1. 先正常抓包,看看特殊字符是怎么处理的,是进行转义还是编码。 2. 对自己的软件进行抓包,与先前的抓包进行数据对比。
用IE登录之后再下载,访问下载页面时,会发送登录时获取的cookie。 但用wget,没法让他提前登录获取cookie呢。[/quote] cookie是网站基本的一些策略。 1. 首先你在用IE访问相应页面的时候,这个时候cookie就已经开始获取了,等到你登陆的时候,会附带这个cookie,一并发送给服务器。你可以模拟IE操作的整个过程,IE怎么做的,程序就怎么做,注意是从IE访问登陆地址开始的。
iceelee 2015-10-23
  • 打赏
  • 举报
回复
引用 1 楼 willhuo 的回复:
虽然现在还是py新手,有个比较靠谱的方式就是抓包 1. 先正常抓包,看看特殊字符是怎么处理的,是进行转义还是编码。 2. 对自己的软件进行抓包,与先前的抓包进行数据对比。
引用 1 楼 willhuo 的回复:
虽然现在还是py新手,有个比较靠谱的方式就是抓包 1. 先正常抓包,看看特殊字符是怎么处理的,是进行转义还是编码。 2. 对自己的软件进行抓包,与先前的抓包进行数据对比。
用IE登录之后再下载,访问下载页面时,会发送登录时获取的cookie。 但用wget,没法让他提前登录获取cookie呢。
willhuo 2015-10-22
  • 打赏
  • 举报
回复
虽然现在还是py新手,有个比较靠谱的方式就是抓包 1. 先正常抓包,看看特殊字符是怎么处理的,是进行转义还是编码。 2. 对自己的软件进行抓包,与先前的抓包进行数据对比。

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧