Ошибка пакета Python SocksiPy: TypeError: Type str не поддерживает буферный API для строки?

Когда я пытаюсь подключиться к gmail через этот код:

import socks
import imaplib
import socket
import socks
s = socks.socksocket()
s.setproxy(socks.PROXY_TYPE_HTTP, '192.168.208.51', 3128)
s.connect(('imap.gmail.com', 993))

Я получаю сообщение об ошибке:

Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
s.connect(('imap.gmail.com', 993))
File "C:\Python34\lib\site-packages\socks.py", line 406, in connect
self.__negotiatehttp(destpair[0],destpair[1])
File "C:\Python34\lib\site-packages\socks.py", line 357, in __negotiatehttp
while resp.find("\r\n\r\n")==-1:
TypeError: Type str doesn't support the buffer API

Любые идеи? Я на компьютере, который использует прокси, поэтому использую SocksiPy для подключения к imap.gmail.com.


person Community    schedule 04.02.2015    source источник


Ответы (1)


В вашем коде нет ничего плохого; вы используете версию SocksiPy, которая не была перенесена на Python 3. Вам следует выполнить обновление до версии 1.02. Или вам следует вернуться к Python 2.


Пояснение:

Это Python 3. В отличие от Python 2, объекты bytes и str не взаимозаменяемы. Если вы попытаетесь сделать что-то вроде этого:

>>> b'abc'.find('a')

Вы получите ошибку, которую видите. На самом деле «буферный API» реализуется bytes объектами.

person Andrea Corbellini    schedule 04.02.2015
comment
Как обновить? Я использую окна? - person ; 04.02.2015
comment
@SteMain: похоже, эта версия доступна только для Debian/Ubuntu и производных. На вашем месте я бы загрузил пакет Ubuntu, извлек его и скопируйте файл socks.py в C:\Python34\lib\site-packages. - person Andrea Corbellini; 04.02.2015
comment
Arw, это настоящая головная боль... потому что весь мой код предназначен для Python34 в Windows :( - person ; 04.02.2015
comment
@SteMain: он упакован для Debian/Ubuntu, но будет работать в Windows. Просто скачайте, распакуйте и скопируйте его. - person Andrea Corbellini; 04.02.2015
comment
Я отредактировал свой вопрос с новой ошибкой. Спасибо за помощь, приятель - person ; 04.02.2015
comment
@SteMain: эта ошибка связана с вашим прокси, а не с SocksiPy. Пожалуйста, восстановите свой вопрос и создайте новый. (Вот как работает переполнение стека.) - person Andrea Corbellini; 04.02.2015