AttributeError: 'str' object n'a pas d'attribut 'items'
Dans le code suivant:
#!/usr/local/bin/python
import json
APPLICATION_NAME = 'cc9226315643df89-36bf02429075329d0ba36748360d050c'
HEADERS1 = json.dumps(dict(Destination = u"/api/af/latest/applications/%s/rulesets" % (APPLICATION_NAME)))
print "Headers1 is %s" % (HEADERS1)
HEADERS2 = {'Destination': '/api/af/latest/applications/%s/rulesets' % (APPLICATION_NAME)}
print "Headers2 is %s" % (HEADERS2)
J'obtiens le résultat suivant:
Headers1 is {"Destination": "/api/af/latest/applications/cc9226315643df89-36bf02429075329d0ba36748360d050c/rulesets"}
Headers2 is {'Destination': '/api/af/latest/applications/cc9226315643df89-36bf02429075329d0ba36748360d050c/rulesets'}
mais lorsque j'essaie d'utiliser HEADER1 ou HEADER2 en RESTE un appel à l'aide de requêtes(), j'obtiens des résultats très différents:
SERVER_URL = 'http://1.1.33.109:8087%s' % (APP_PATH)
REQ_DATA = None
print "Headers are: ", HEADERS
print "SERVER_URL is: ", SERVER_URL
print "Request Data is:", REQ_DATA
print ""
RESPONSE = requests.request(
'MOVE',
SERVER_URL,
auth = ('admin', 'admin'),
verify = False,
data = REQ_DATA,
headers = HEADERS1 ) #<-- If I use HEADER1 it breaks, if I use HEADER2 it works
print "Move Ruleset back to the Application RESULT: %s\n" % (RESPONSE)
Je reçois le texte suivant avec HEADER1:
Traceback (most recent call last):
File "./myrest.py", line 234, in <module>
headers = HEADERS1 )
File "/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/api.py", line 44, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/sessions.py", line 324, in request
prep = req.prepare()
File "/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/models.py", line 223, in prepare
p.prepare_headers(self.headers)
File "/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/models.py", line 340, in prepare_headers
headers = dict((name.encode('ascii'), value) for name, value in headers.items())
AttributeError: 'str' object has no attribute 'items'
Si j'utilise HEADER2 il exécute proprement:
Déplacer Règles de revenir à l'Application RÉSULTAT: Réponse [200]
Quelqu'un peut-il expliquer quelles sont les différences?
Ce qui vous fait penser à un JSON-chaîne codée serait acceptable comme en-têtes de dictionnaire pour une requête HTTP?
OriginalL'auteur snrkl | 2013-09-18
Vous devez vous connecter pour publier un commentaire.
Vous êtes de passage dans un chaîne;
headers
ne peut pas jamais être une chaîne encodée JSON, c'est toujours un dictionnaire Python.La
print
résultats sont trompeuses; JSON objets codés ressemble à du Python dictionnaire des représentations, mais ils sont loin de la même chose.La
demande
API stipule clairement queheaders
doit être un dictionnaire:Données JSON est quelque chose que vous souhaitez envoyer en tant que contenu vers un autre serveur, pas quelque chose que vous souhaitez utiliser pour communiquer avec l'API Python.
Merci pour cette btw...
OriginalL'auteur Martijn Pieters
J'ai eu ce problème et j'ai besoin de l'en-tête avec un type de contenu et passer dans un élément de données json.
OriginalL'auteur ddtraveller
Vous Pouvez passer {
il a travaillé
OriginalL'auteur channareddy biradar