Perl Google日历API-补丁返回200 OK但不实际更新事件
我正在尝试将我的webapp日历与Google日历集成。我正在成功验证用户,能够从Google读取事件并从Google删除事件。我无法将我的应用程序中的事件更新到Google 我正在使用补丁方法,因为我只想修改我在API调用中发送的字段(与PUT调用相反,PUT调用需要事件的所有字段) 我的Perl代码创建了一个JSON对象,表示我想要更改的内容。然后我向Google提交一个补丁请求,我收到状态200OK和Google返回的事件资源。我收到的应该是修改过的事件资源,但是我修改过的字段在响应中没有修改。当我签入谷歌日历本身时,我再次看到事件没有被修改 当事件没有更新时,我不明白为什么我得到的是200 OK响应而不是错误。奇怪的是,在响应中,“updated”timestamp属性已经更新,但是summary字段还没有更新Perl Google日历API-补丁返回200 OK但不实际更新事件,perl,google-api,google-calendar-api,Perl,Google Api,Google Calendar Api,我正在尝试将我的webapp日历与Google日历集成。我正在成功验证用户,能够从Google读取事件并从Google删除事件。我无法将我的应用程序中的事件更新到Google 我正在使用补丁方法,因为我只想修改我在API调用中发送的字段(与PUT调用相反,PUT调用需要事件的所有字段) 我的Perl代码创建了一个JSON对象,表示我想要更改的内容。然后我向Google提交一个补丁请求,我收到状态200OK和Google返回的事件资源。我收到的应该是修改过的事件资源,但是我修改过的字段在响应中没有
my $ua = LWP::UserAgent->new;
my $url = "https://www.googleapis.com/calendar/v3/calendars/primary/events/${id}?access_token=${access_token}";
my $resource{"summary"} = "$g{summary}";
$resource = encode_json(\%resource);
my $headers = HTTP::Headers->new();
$headers->header(If_Match => "$etag");
my $request = HTTP::Request->new('PATCH',$url,$headers,$resource);
my $response = $ua->request($request);
my $status = $response->status_line;
my $result = decode_json($response->decoded_content);
结果中的“etag”值按照我的预期进行了更新,这表明日历事件在Google中(某种程度上)被修改
一些数据::转储程序跟踪:
请求:
$VAR1 = bless( {
'_content' => '{"summary":"End of season function MODIFIED"}',
'_uri' => bless( do{\(my $o = 'https://www.googleapis.com/calendar/v3/calendars/primary/events/<eventID>?access_token=<access_token>')}, 'URI::https' ),
'_headers' => bless( {
'if-match' => '<etag>'
}, 'HTTP::Headers' ),
'_method' => 'PATCH'
}, 'HTTP::Request' );
$VAR1=祝福({
“_content'=>”{“summary”:“季末功能已修改”}”,
“_uri”=>祝福(做{\(我的$o=)https://www.googleapis.com/calendar/v3/calendars/primary/events/?access_token= 我完全通过反复试验找到了解决方案——将“Content Type”头添加到HTTP头中似乎可以达到目的:
my $headers = HTTP::Headers->new();
$headers->header(If_Match => "$etag");
$headers->header(Content_Type => "application/json");
添加头部accept=application/json为我修复了它
my $headers = HTTP::Headers->new();
$headers->header(If_Match => "$etag");
$headers->header(Content_Type => "application/json");