私はPython 3.5.2
とscrap 1.1.1
を使用しています。以下のコードを実行中にエラーがありますpython 3.5: "TypeError:memoryview: 'str'ではなく、バイトのようなオブジェクトが必要です"
:
#-*- 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']
エラー:
encoded_user_pass = base64.encodebytes(proxy['user_pass'])
しかし、私はドン:
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'
私はエラーがこの文に関連していると思いますそれを解決する方法は分かりません。
ご協力ありがとうございます。
ありがとうございます!
編集:
request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
TypeError: Can't convert 'bytes' object to str implicitly
私は何をすべき:
encoded_user_pass = base64.encodebytes(proxy['user_pass'])
は別のエラーがある
encoded_user_pass = base64.encodebytes(proxy['user_pass'].encode())
に変更されましたか?
だけFYIにbase64エンコード:
のか、あなたのケースでパスワードは安全ではなく、セキュリティに関してはほとんど何もしません。より安全な方法で実行するには、ソルトハッシュを調べる必要があります。この質問をチェックアウト:http://stackoverflow.com/questions/9594125/salt-and-hash-a-password-in-python – Granitosaurus
@Granitosaurusありがとう、私は後でそれを試してみましょう。もう一つのエラーがあります、私の編集を参照してください、ありがとう。 – zwl1619