我目前正致力于使用PHP将API联系人的api调用批处理。您可能知道,Contacts API不是官方google-api-php-client的一部分,我们必须处理原始XML请求。
唯一请求工作正常,但当我尝试通过批处理请求批处理它们时,如https://developers.google.com/google-apps/contacts/v3/#batch_operations_for_contacts中所述,我在400 Bad Request
出现Response contains no content type
错误作为错误说明。即使在互联网上找到的样本也会失败。
以下是小代码失败:
<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns='http://www.w3.org/2005/Atom'
xmlns:gContact='http://schemas.google.com/contact/2008'
xmlns:gd='http://schemas.google.com/g/2005'
xmlns:batch='http://schemas.google.com/gdata/batch'>
<entry>
<batch:id>create</batch:id>
<batch:operation type='insert'/>
<category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2008#contact'/>
<gd:name>
<gd:fullName>Example example</gd:fullName>
<gd:givenName>Example</gd:givenName>
<gd:familyName>Example</gd:familyName>
</gd:name>
<gd:email rel='http://schemas.google.com/g/2005#home' address='liz@gmail.com' primary='true'/>
</entry></feed>
通过POST请求作为正文发送:
$httpClient = $gclient->authorize();
$resp = $httpClient->sendRequest('POST', 'https://www.google.com/m8/feeds/contacts/default/full/batch', ['body'=>$xxx]);
print_r((string)$resp->getBody());
其中$xxx
是上面的XML。
同样,简单的请求工作正常,问题只出现在批处理中。我检查过换行符,尝试重新启动第一行<?xml....
行(因为有些示例没有提及),等等但是没有用。
由于未广泛使用Contacts API,因此很难获得一些建议或工作样本。这里和那里有很多问题,但很少回答......
我希望有人能够帮我解决这个恼人的问题。
由于
[EDIT 2018-02-07] 幸运的是,错误消息“响应中没有内容类型”具有误导性。这不是RESPONSE缺少内容类型,而是REQUEST(批量订阅源)!
因此,在请求中插入内容类型标头后,一切正常。 API参考没有提到批量订阅源所需的内容类型标题(但它会根据其他与批次无关的内容提及它。)
所以PHP部分现在是:
$httpClient = $gclient->authorize();
$resp = $httpClient->sendRequest(
'POST',
'https://www.google.com/m8/feeds/contacts/default/full/batch',
[
'body' => $xxx,
'headers' => array('Content-Type' => 'application/atom+xml')
]
);
print_r((string)$resp->getBody());