批处理联系人API时出现错误请求(400)

时间:2018-02-06 09:53:43

标签: google-api-php-client google-contacts

我目前正致力于使用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());

0 个答案:

没有答案