Форум сайта python.su
import urllib3 my_header_1={"User-Agent": "999999"} ua="'User-Agent': '9999999999'" my_header_2="{"+ua+"}" http=urllib3.PoolManager() r=http.request('GET', BASE_URL, headers=my_header_1) # все нормально выполняется
r=http.request('GET', BASE_URL, headers=my_header_2) # выдает ошибку
r=http.request('GET', BASE_URL, headers=my_header_2) File "/usr/lib/python3/site-packages/urllib3/request.py", line 69, in request **urlopen_kw) File "/usr/lib/python3/site-packages/urllib3/request.py", line 90, in request_encode_url return self.urlopen(method, url, **extra_kw) File "/usr/lib/python3/site-packages/urllib3/poolmanager.py", line 165, in urlopen response = conn.urlopen(method, u.request_uri, **kw) File "/usr/lib/python3/site-packages/urllib3/connectionpool.py", line 558, in urlopen headers = headers.copy() AttributeError: 'str' object has no attribute 'copy'
Отредактировано nick789 (Сен. 21, 2016 10:08:03)
Офлайн
Передавайте в request header в виде словаря, не надо извращаться с конкатенацией строк.
Офлайн
my_header_2=“{”+ua+“}” = будет строка а не словарь
ua = "'User-Agent': '9999999999'" my_header_2 = "{" + ua + "}" print type(my_header_2) <type 'str'>
# -*- coding: utf-8 -*- my_header_2 = {} my_header_2['User-Agent'] = '9999999999' my_header_2['User-HER'] = '0000000' print type(my_header_2), my_header_2 <type 'dict'> {'User-HER': '0000000', 'User-Agent': '9999999999'}
Офлайн
В первом случае у тебя словарь, а во втором действительно обычная строка. Сделай по аналогии с первым заголовком и все.
Офлайн
ясно, сейчас попробую…
вопрос такой, как я мог(должен был) узнать тип переменной ?
смотрел сюда:
https://urllib3.readthedocs.io/en/latest/user-guide.html
там упоминания о типе словарь нету. или я что то пропустил??
извините за въедливость…
Офлайн
r.headers HTTPHeaderDict({'Content-Length': '33', ...})
Офлайн
а логика моих действий, какая должна была быть?
что бы выйти на это результат.
Офлайн
у вас на уровне костного мозга должно быть понимание типов переменных питона
{'Content-Length': '33', ...} {} - словарь [] - список () - кортеж "" - строка
Офлайн