AttributeError: 'str' - Objekt hat kein Attribut 'items'
In den folgenden code:
#!/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)
Bekomme ich die folgende Ausgabe:
Headers1 is {"Destination": "/api/af/latest/applications/cc9226315643df89-36bf02429075329d0ba36748360d050c/rulesets"}
Headers2 is {'Destination': '/api/af/latest/applications/cc9226315643df89-36bf02429075329d0ba36748360d050c/rulesets'}
aber wenn ich versuche, verwenden Sie entweder HEADER1 oder HEADER2 in einem REST-Aufruf mittels Anfragen(), bekomme ich sehr unterschiedliche Ergebnisse:
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)
Bekomme ich die folgende mit 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'
Wenn ich HEADER2 es führt sauber:
Bewegen Regelsatz zurück zu der Anwendung ERGEBNIS: Antwort [200]
Kann mir jemand erklären, was die Unterschiede sind?
- Was macht Sie denken, dass ein JSON-kodierten string wäre akzeptabel, da eine Wörterbuch-Header für eine HTTP-Anforderung?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Übergeben Sie in einem string;
headers
können nicht immer einen JSON-kodierten string, es ist immer ein Python-dictionary.Den
print
Ergebnisse sind trügerisch; JSON-codierte Objekte sehen aus wie Python dictionary Darstellungen, aber Sie sind weit von der gleichen Sache.Den
Anfragen
- API klar, dassheaders
muss ein Wörterbuch:JSON-Daten ist etwas, was man senden würde, wie Inhalte auf einem anderen server, nicht etwas, das Sie verwenden würden, um die Kommunikation mit einem Python-API.
Hatte ich dieses Problem und ich brauchte, um die header mit content-type und pass in einem data-element als json.
Können Sie pass {
funktionierte es