Perl Google日历API-补丁返回200 OK但不实际更新事件

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返回的事件资源。我收到的应该是修改过的事件资源,但是我修改过的字段在响应中没有

我正在尝试将我的webapp日历与Google日历集成。我正在成功验证用户,能够从Google读取事件并从Google删除事件。我无法将我的应用程序中的事件更新到Google

我正在使用补丁方法,因为我只想修改我在API调用中发送的字段(与PUT调用相反,PUT调用需要事件的所有字段)

我的Perl代码创建了一个JSON对象,表示我想要更改的内容。然后我向Google提交一个补丁请求,我收到状态200OK和Google返回的事件资源。我收到的应该是修改过的事件资源,但是我修改过的字段在响应中没有修改。当我签入谷歌日历本身时,我再次看到事件没有被修改

当事件没有更新时,我不明白为什么我得到的是200 OK响应而不是错误。奇怪的是,在响应中,“updated”timestamp属性已经更新,但是summary字段还没有更新

  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");