반응형
다음 코드에서 :
#!/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)
다음 출력을 얻습니다.
Headers1 is {"Destination": "/api/af/latest/applications/cc9226315643df89-36bf02429075329d0ba36748360d050c/rulesets"}
Headers2 is {'Destination': '/api/af/latest/applications/cc9226315643df89-36bf02429075329d0ba36748360d050c/rulesets'}
하지만 requests ()를 사용하여 REST 호출에서 HEADER1 또는 HEADER2를 사용하려고하면 매우 다른 결과가 나타납니다.
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)
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'
HEADER2를 사용하면 깨끗하게 실행됩니다.
규칙 세트를 애플리케이션으로 다시 이동 결과 : 응답 [200]
누구든지 차이점이 무엇인지 설명 할 수 있습니까?
해결 방법
문자열 을 전달하고 있습니다. headers
는 JSON으로 인코딩 된 문자열이 절대 일 수 없으며 항상 Python 사전입니다.
인쇄물
결과는 기만적입니다. JSON으로 인코딩 된 객체는 Python 사전 표현과 매우 유사하지만 동일한 것과 멀다 .
headers
– (선택 사항)Request
와 함께 보낼 HTTP 헤더 사전
JSON 데이터는 Python API와 통신하는 데 사용하는 것이 아니라 다른 서버에 콘텐츠로 보내는 것입니다.
참조 페이지 https://stackoverflow.com/questions/18867898
반응형
'파이썬' 카테고리의 다른 글
파이썬 How do I tell PyLint "it's a variable, not a constant" to stop message C0103? (0) | 2021.01.06 |
---|---|
파이썬 Python: Executing multiple functions simultaneously (0) | 2021.01.06 |
파이썬 Python twisted: where to start (0) | 2021.01.06 |
파이썬 문자열의 모든 따옴표를 이스케이프 된 따옴표로 바꾸시겠습니까? (0) | 2021.01.06 |
파이썬을 사용하여 CSV 파일을 읽는 동안 빈 줄을 건너 뛰는 방법 (0) | 2021.01.06 |
댓글