Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 21, 2016 10:04:24

nick789
Зарегистрирован: 2016-09-21
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

строковые переменые

 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'

визуально, если их выводить через print строки одинаковы.
надо привести их к какому то типу?

Отредактировано nick789 (Сен. 21, 2016 10:08:03)

Офлайн

#2 Сен. 21, 2016 10:12:47

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

строковые переменые

Передавайте в request header в виде словаря, не надо извращаться с конкатенацией строк.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Сен. 21, 2016 10:13:46

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

строковые переменые

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'}



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#4 Сен. 21, 2016 10:14:55

realivan
Зарегистрирован: 2015-08-15
Сообщения: 39
Репутация: +  0  -
Профиль   Отправить e-mail  

строковые переменые

В первом случае у тебя словарь, а во втором действительно обычная строка. Сделай по аналогии с первым заголовком и все.

Офлайн

#5 Сен. 21, 2016 11:09:45

nick789
Зарегистрирован: 2016-09-21
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

строковые переменые

ясно, сейчас попробую…
вопрос такой, как я мог(должен был) узнать тип переменной ?
смотрел сюда:
https://urllib3.readthedocs.io/en/latest/user-guide.html
там упоминания о типе словарь нету. или я что то пропустил??
извините за въедливость…

Офлайн

#6 Сен. 21, 2016 11:31:10

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

строковые переменые

 r.headers
HTTPHeaderDict({'Content-Length': '33', ...})



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#7 Сен. 21, 2016 11:54:43

nick789
Зарегистрирован: 2016-09-21
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

строковые переменые

а логика моих действий, какая должна была быть?
что бы выйти на это результат.

Офлайн

#8 Сен. 21, 2016 12:22:03

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

строковые переменые

у вас на уровне костного мозга должно быть понимание типов переменных питона

 {'Content-Length': '33', ...}
{} - словарь
[] - список
() - кортеж
"" - строка
И так далее



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version