-
Notifications
You must be signed in to change notification settings - Fork 14
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
运行报错 #9
Comments
在我这里运行时,检验时间是19秒左右。你可能因为网络问题没有获取到代理。可尝试更换另一代理来源,或者重新运行几次程序。 也可以将我给的文件放入运行程序的文件夹中。 |
你好,问题的原因也许不在网络问题上,而在于 urllib3
如果把 check.py 中的 try-catch 块去掉,就可以看到其抛出了 urllib3.exceptions.ProxySchemeUnknown 异常,导致流程没能进入到创建 *_temp.txt 文件那里,进而引发找不到文件的问题 根据上面链接提供的办法,我为 ProxyTask._proxy 添加了 “https://” 前缀,从而正常执行了脚本 希望该建议可以帮助到你 :-) |
多谢反馈。 |
@WqVoon 目前在我这测试出现的问题是使用的proxy_pool 无可用代理导致没有文件写入,更换代理来源可解决。 而楼主最明显的问题是没有获取到可用代理,体现在验证时间小于一秒。 |
@NormanBB 如果 “无可用代理导致没有文件写入” 指的是 check.py 的 r1.status_code 不等于 200 的话,确实也会导致 temp 文件无法被建立,但是我认为验证时间小于一秒 不太可能 是出于这个原因,请看我下面的截图: 左边是 self._proxy 直接等于 ip+port 的情况,右边则是加入了 “https://” 前缀,两者均工作在同样的解释器环境下,并在运行前删除了当前目录中所有的 proxy 文件,结果左边的验证时间小于1秒且没有 temp 文件产生,而右边的验证时间合理且产生了 temp 文件。 这里左边会小于1秒,是因为 check.py 中的 request.post 请求在我的环境下没有发出去,它产生了我上面提到的异常,导致整个 ProxyTask.run 相当于只执行了第一句代码,所以很快就“验证”完了;但是如果是没有获取到代理的话,那么它至少建立了连接,所以时间会比前者提到的情况要长,尤其当遇到超时的情况时 requests 会等待10秒。 另外对于我提到的添加前缀的问题,现在的改动似乎只是在验证代理时添加了前缀,写入到 temp 里时依然是 ip+port 的情况,这样在实际对问卷发送 post 请求时(指 Auto_WjX 函数),请求依然会因为我上面提到的问题而无法发送,所以改动的方法应该是将 temp 文件里的内容也加入前缀 |
我觉得异常无法复现的原因更多的是版本的问题,可以看到 gitpod 中的 python 版本是 3.8.3,而我的环境中 py 的版本是 3.7.6 据上面的 issue 链接中所言,这个异常在这种上下文中会出现的原因在于 requests.utils 的一个函数利用 urllib3 的方式有问题(本质上似乎还是 urllib3 的问题),一个调用的例子是 至于无法连接到 httpbin 的想法,我觉得它就是我说的 “尤其当遇到超时的情况时 requests 会等待10秒” 的情况,比如你可以在国内网络环境下发送一个 get 请求到 Google,requests 会根据 timeout 的值等待对应的秒数后抛出 requests.exceptions.ConnectTimeout 异常。 |
多谢指点。目前已完成两处修正。 如果对项目有pr就更好了。:) |
错误提示没有proxy_pool_temp.list这个文件,是需要我自己去生成吗,我看代码里直接指定file_name = 'proxy_pool_temp.list'
The text was updated successfully, but these errors were encountered: