Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用curl(php)的googlecaldavxml请求_Php_Xml_Curl_Caldav_Sabredav - Fatal编程技术网

使用curl(php)的googlecaldavxml请求

使用curl(php)的googlecaldavxml请求,php,xml,curl,caldav,sabredav,Php,Xml,Curl,Caldav,Sabredav,我正在尝试使用PHP向google CalDAV服务器发出CalDAV XML请求 由于某些原因,google calDAV的文档非常缺乏 目的是获取所有事件的列表,包括特定于事件的数据。(如开始、结束、总结等)。 目标是尽可能高效地完成这项工作(所有事件数据都在一个请求中) 我发现这可以通过一个报告请求来完成 我正在使用中找到的代码 我的确切密码: $xml= '<c:calendar-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:x

我正在尝试使用PHP向google CalDAV服务器发出CalDAV XML请求

由于某些原因,google calDAV的文档非常缺乏

目的是获取所有事件的列表,包括特定于事件的数据。(如开始、结束、总结等)。 目标是尽可能高效地完成这项工作(所有事件数据都在一个请求中)

我发现这可以通过一个报告请求来完成

我正在使用中找到的代码

我的确切密码:

    $xml= '<c:calendar-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:caldav"><d:prop><c:calendar-data /></d:prop></c:calendar-query>';
    $url = "https://apidata.googleusercontent.com/caldav/v2/*email*/events";
    $user = "**********@gmail.com";
    $pw = "*********";

    $data = $this->doRequest($user, $pw, $url, $xml);
    print_r($data);

}

public function doRequest($user, $pw, $url, $xml)
{
    $c=curl_init();
    $url = preg_replace('{^https?://[^/]+}', '', $url);
    curl_setopt($c, CURLOPT_URL, $url);
    curl_setopt($c, CURLOPT_HTTPHEADER, array("Depth: 1", "Content-Type: text/xml; charset='UTF-8'", "Prefer: return-minimal"));
    curl_setopt($c, CURLOPT_HEADER, 0);
    curl_setopt($c, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($c, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($c, CURLOPT_USERPWD, $user.":".$pw);
    curl_setopt($c, CURLOPT_CUSTOMREQUEST, "REPORT");
    curl_setopt($c, CURLOPT_POSTFIELDS, $xml);
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    $data=curl_exec($c);

    curl_close($c);

    return $data;
}    
$xml='';
$url=”https://apidata.googleusercontent.com/caldav/v2/*电子邮件*/活动”;
$user=“*********@gmail.com”;
$pw=“**********”;
$data=$this->doRequest($user,$pw,$url,$xml);
打印(数据);
}
公共函数doRequest($user、$pw、$url、$xml)
{
$c=curl_init();
$url=preg_replace('{^https?://[^/]+}','','$url);
curl_setopt($c,CURLOPT_URL,$URL);
curl_setopt($c,CURLOPT_HTTPHEADER,数组(“深度:1”,“内容类型:text/xml;charset='UTF-8',“首选:返回最小值”));
curl_setopt($c,CURLOPT_头,0);
curl_setopt($c,CURLOPT_SSL_VERIFYHOST,false);
curl_setopt($c,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($c,CURLOPT_HTTPAUTH,CURLAUTH_BASIC);
curl_setopt($c,CURLOPT_USERPWD,$user.:“$pw);
curl_setopt($c,CURLOPT_CUSTOMREQUEST,“报告”);
curl_setopt($c,CURLOPT_POSTFIELDS,$xml);
curl_setopt($c,CURLOPT_RETURNTRANSFER,1);
$data=curl_exec($c);
收尾费($c);
返回$data;
}    
xml请求是从中复制粘贴的

谷歌在这段代码中返回的是“未知错误”。 我知道google提供的凭据正在运行,因为我使用SabreDAV的内置请求(例如propfind)成功地尝试了一些请求。但SabreDAV无法生成报告请求

因此,我认为xml请求中一定有一些东西是google caldav无法正确处理的


我已经花了好几天的时间来处理这个问题,但我似乎找不到合适的解决方案。

好吧,您似乎正在使用谷歌CalDAV API不允许的HTTP Basic Auth:


然后,您没有指定哪个URL是您请求的目标。

您需要首先了解有关“未知错误”的更多信息。这条信息本身要求不高。请先让你的编程问题尽可能具体。随机建议。能否尝试删除
深度
标题?我觉得我记得这可能与此有关,但我不确定…@hakre简言之,问题是:为了从google calDAV服务器获得有效响应,我做错了什么?研究并没有给我太多关于“未知错误”的信息。@Rbn:我已经可以从你的帖子中解读出来了。但是,单独获取错误消息通常不符合完整问题的条件。您应该始终添加迄今为止发现的有关错误消息的信息,以及您如何检查它是否适用于您的场景。简而言之。我知道要了解更多信息(比如站在一堵无法通过的墙前)似乎是难以控制的,但你至少需要给出更多的细节。同时尽量减少场景中的代码,这总是有帮助的。解释您设置的每个卷曲选项,并提供设置该选项的参考。我放弃了calDAV的想法,改用了Google日历API,它使用的是Oauth2。