2017-03-29 7 views
0

저는 지금 배포하고있는 CRM 시스템의 API와 통신 할 Python 스크립트를 작성하고 있습니다. CRM 서버에서 데이터를 가져올 수는 있지만 새 항목을 추가 (쓰기) 할 수는 없습니다. Python과 프로그래밍 전반에 대해 처음으로 익숙해 졌기 때문에 바보 같은 짓을하고있는 것 같습니다. 누군가 올바른 방향으로 나를 가리킬 수 있습니까? 서버는 데이터를 거부하지 않지만 새로운 데이터를 게시하는 것과는 대조적으로 /api/v1.0/payments에서 데이터를 요청한 것처럼 작동합니다. http://docs.ucrm.apiary.io/#reference/payments/payments/postPython 3 urlopen 사용

내가 바닥에 제대로 urlopen 사용하고 있습니까 :

from urllib.request import Request, urlopen 

headers = { 
    'Content-Type': 'application/json', 
    'X-Auth-App-Key': '[API key]' 
} 

values = b""" 
    { 
"clientId": 104, 
"method": 3, 
"checkNumber": "", 
"createdDate": "2016-09-12T00:00:00+0000", 
"amount": 40, 
"note": "", 
    } 
""" 

request = Request('http://[SERVER_URL]/api/v1.0/payments', data=values, headers=headers) 

response_body = urlopen(request).read() 
print(response_body) 

나는 여기 API 문서에서 예제 코드를 기반으로 일하고 있어요?

+0

, 단지 요청 및 일부 정보를 인쇄 할 수 있습니다. 정확히 무엇을하고 싶습니까? 어떤 오류 메시지 (있는 경우)가 나타 납니까? –

답변

0

This question/answer이 문제 일 수 있습니다. 기본적으로 POST 요청은 /api/v1.0/payments/로 리디렉션됩니다 (후행 슬래시에주의하십시오). POST가 GET 요청으로 리디렉션되면 서버가 검색하려고하는 것처럼 응답합니다 모든 지불 정보.

다른주의 사항은 'note'값 다음에 , 후행을 포함하므로 실제로 json 데이터가 유효하지 않으므로 문제가 될 수 있습니다. 헤더에 Content-Length 헤더가 누락 된 것 같습니다. 나는 당신의 JSON 데이터를 생성하기 위해 json 모듈을 사용하는 것이 좋습니다 것입니다 : 당신은 어떤 데이터를 수정하지 않는 것

values = json.dumps({ 
    "clientId": 104, 
    "method": 3, 
    "checkNumber": "", 
    "createdDate": "2016-09-12T00:00:00+0000", 
    "amount": 40, 
    "note": "" 
}) 

headers = { 
    'Content-Type': 'application/json', 
    'Content-Length': len(values), 
    'X-Auth-App-Key': '[API key]' 
} 

request = Request('http://[SERVER_URL]/api/v1.0/payments/', data=values, headers=headers) 
+0

도와 주셔서 감사합니다. 서버가 실제로 데이터를 거부하지 않고 /api/v1.0/payments (json 형식의 서버에있는 기존 지불 정보를 모두 덤프)에서 정보를 검색하려고 할 때와 동일한 응답을 보냅니다. 이 코드는 내가 사용하고있는 예제 코드에서 문제가 될 수 있다고 생각하지만 플랫폼의 포럼에 가기 전에 자체 코드로 문제를 해결하고 싶습니다. json 모듈을 모범 사례로 사용하고 있습니까, 아니면 내 코드 형식에 문제가 있습니까? – Detoxica

+0

모범 사례로 생각 하겠지만이 문제에 대해서는 아무런 권한이 없습니다. 객체의 키 값에 대해 파이썬 표현식을 쉽게 사용할 수 있기 때문에 확실히 다재다능합니다. 코드의 형식과 관련된 문제는''note ":",''의 뒤에 오는 쉼표입니다. – mshildt

+0

첫 번째 의견에서 제공 한 추가 정보는 주 질문에 포함되어야합니다. 실제 문제를 설명하는 데 도움이됩니다. 내 대답을 내 대답보기 ... – mshildt