我试图获取一些http代理并将它们附加到列表中,然后通过用urllib打开它们来单独测试它们但是我得到以下类型错误。我试过包装'代理'在测试函数中使用str()但返回另一个错误。
proxies = []
with open('working_proxies.txt', 'rb') as working_proxies:
for proxy in working_proxies:
proxy.rstrip()
proxies.append(proxy)
def test(proxy):
try:
urllib.urlopen(
"http://google.com",
proxies={'http': proxy}
)
except IOError:
print "Connection error! (Check proxy)"
else:
working_proxy = True
working_proxy = False
while working_proxy == False:
myProxy = proxies.pop()
test(myProxy)
我的错误:
Connection error! (Check proxy)
Traceback (most recent call last):
File "proxy_hand.py", line 26, in <module>
test(proxy)
File "proxy_hand.py", line 16, in test
proxies={'http': proxy}
File "/usr/lib/python2.7/urllib.py", line 87, in urlopen
return opener.open(url)
File "/usr/lib/python2.7/urllib.py", line 193, in open
urltype, proxyhost = splittype(proxy)
File "/usr/lib/python2.7/urllib.py", line 1074, in splittype
match = _typeprog.match(url)
TypeError: expected string or buffer
答案 0 :(得分:1)
您在此处使用代理 binary 打开文件:
with open('working_proxies.txt', 'rb') as working_proxies:
b
模式字符串中的'rb'
表示您正在阅读二进制文件,例如bytes
个对象。
以文本模式打开文件(并且可能指定除系统默认设置之外的编解码器)或使用显式bytes
调用将str
个对象解码为bytes.decode()
:
proxies.append(proxy.decode('ascii'))
我希望ASCII足以解码适合用作代理的主机名。
请注意,您的working_proxy
标志不起作用;它未在global
中标记为test
。也许您想要捕获IOError
之外的test
异常 ,或者将循环移动到该函数中。当你的代理用完时,你也需要弄清楚你会做什么(所以当它们都不起作用时)。