【发布时间】:2016-11-27 23:11:43
【问题描述】:
我正在使用 python 3.5.2 和 scrapy 1.1.1。
运行以下代码时出现错误:
#-*- coding:utf-8-*-
import random
import base64
class ProxyMiddleware(object):
def process_request(self, request, spider):
proxy = random.choice(PROXIES)
if proxy['user_pass'] is not None:
request.meta['proxy'] = "http://%s" % proxy['ip_port']
encoded_user_pass = base64.encodebytes(proxy['user_pass'])
request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
print("ok!" + proxy['ip_port'])
else:
print("fail!" + proxy['ip_port'])
request.meta['proxy'] = "http://%s" % proxy['ip_port']
错误:
File "C:\Users\dell\AppData\Local\Programs\Python\Python35\lib\base64.py", line 518, in _input_type_check
m = memoryview(s)
TypeError: memoryview: a bytes-like object is required, not 'str'
我认为错误与这句话有关:
encoded_user_pass = base64.encodebytes(proxy['user_pass'])
但我不知道如何解决。
请帮忙,
提前致谢!
编辑:
encoded_user_pass = base64.encodebytes(proxy['user_pass'])
改为
encoded_user_pass = base64.encodebytes(proxy['user_pass'].encode())
还有一个错误:
request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
TypeError: Can't convert 'bytes' object to str implicitly
我该怎么办?
【问题讨论】:
-
仅供参考 base64 对密码进行编码是不安全的,并且在安全性方面几乎没有任何作用。您应该研究盐散列以获得更安全的方法;看看这个问题:stackoverflow.com/questions/9594125/…
-
@Granitosaurus 谢谢,我稍后再试。现在还有另一个错误,请参阅我的编辑,谢谢。
标签: python-3.x scrapy