2014-07-05 2 views
0

Google 주소록을 사용하여 연락처를 만들거나 업데이트하거나, ClientLogin을 사용하여 인증하거나, Indy HTTP 스택이있는 Delphi를 사용하여 코딩하는 과정에서 몇 주 전에 오류가 발생하기 시작했습니다. 응용 프로그램은 그 전에 완벽하게 작동했습니다. 해당 공간의 Google 최근 변경 사항을 따르는 애플리케이션은 HTTPS를 완전히 사용하고 있습니다 (변경 사항이 적용된 후 실제로 몇 주 동안 작동). 주소록 읽기가 아직 작동 중입니다.Google 연락처 API> 주소록 업데이트시 '구문 분석 오류'

HTTP Content-Type이 'application/atom + xml'으로 설정됩니다. Google 연락처 URL이 'https://www.google.com/m8/feeds/contacts/default/full'입니다.

<?xml version="1.0" encoding="UTF-8"?> 
<errors xmlns="http://schemas.google.com/g/2005"> 
<error> 
    <domain>GData</domain> 
    <code>parseError</code> 
    <internalReason>Parse Error</internalReason> 
</error> 
</errors> 

'파싱 오류'가 어떤 종류인지 알 수 없습니다. 최근에 그 공간에서 뭔가 바뀌 었습니까? ClientLogin은 더 이상 사용되지 않지만 연락처를 실제로 업데이트하려면 OAuth 2.0이 의무적으로 필요합니까?

답변

0

유니 코드 BOM을 콘텐츠 페이로드에 포함하고 있습니까? 이로 인해 때때로 parseError가 발생할 수 있습니다.

+0

StringList를 UTF-8 인코딩으로 Stream에 저장하기 전에 명시 적으로 BOM을 TStringList 수준에서 작성하지 않았습니다. BOM 작성 (StringList.WriteBOM : = True)을 활성화했지만 ParseError 메시지와 동일한 결과가 나타납니다. – cycocrew

+0

명시 적으로 StringList.WriteBOM을 False로 설정하면 문제가 해결됩니다. 그래서 BOM을 쓰는 것이 실제로 문제 였고 이중 검사 후에 StringList.WriteBOM이 기본적으로 True로 설정되었습니다. – cycocrew

+0

주소록을 만들면 API 설명서 (https://developers.google.com/google-apps/contacts/v3/#creating_contacts)에 설명 된대로 201 대신 HTTP 코드 200이 반환됩니다. – cycocrew