使用 Perl 创建 Asana 任务
Creating an Asana task using Perl
我正在尝试使用 Perl 在 Asana 中创建任务。我正在使用以下模块:
- WWW::Curl::简单
- JSON
- HTTP::请求
这是我的代码。
my %data = (
"data" => {
"workspace" => "##########", #$config->get('asana/workspace_id'),
"name" => "system error",
"assignee" => "me",
"projects" => "##########",
},
);
my @header = ('Authorization' => 'Bearer '.$personal_access_token));
my $curl = WWW::Curl::Simple->new();
my $uri = $config->get('asana/api_uri');
my $content = JSON->new->utf8->encode(\%data);
my $r = HTTP::Request->new(
'POST',
$uri,
\@header,
$content
);
my $res = $curl->request($r);
当我打印 $content 变量时,它看起来像这样。
{"data":{"workspace":"##########","name":"CBC FZDS Billing - System Error"}}
当我将 $r 变量打印为字符串时,它看起来像这样。 ("personal access token" 显示我提供的个人访问令牌。)
POST https://app.asana.com/api/1.0/tasks
Authorization: Bearer <personal access token>
{"data":{"workspace":"##########","name":"CBC FZDS Billing - System Error"}}
$res->content
的结果是:
'{"errors":[{"message":"missing `workspace` field, and no `parent` or `projects` specified","help":"For more information on API status codes and how to handle them, read the docs on errors: https://asana.com/developers/documentation/getting-started/errors"}]}'
知道为什么这表明缺少工作区字段吗?
在我看来,您需要将 content-type header 设置为 "application/json",因为您发送的数据为 json。
为了帮助您调试未来的问题,您可以在命令行中尝试我们的 curl。
在这种特殊情况下,您会注意到,如果您添加 -H "Content-Type: application/json" 它会起作用,如果您不添加它,它将给您同样的错误。
(有效)
curl -H "Authorization: Bearer ????" -X POST "https://app.asana.com/api/1.0/tasks" -d "{\"data\": { \"workspace\": ZZZZZZZ, \"name\": \"test\" }}" -H "Content-Type: application/json"
对比
(不起作用)
curl -H "Authorization: Bearer ????" -X POST "https://app.asana.com/api/1.0/tasks" -d "{\"data\": { \"workspace\": ZZZZZZZ, \"name\": \"test\" }}"
我正在尝试使用 Perl 在 Asana 中创建任务。我正在使用以下模块:
- WWW::Curl::简单
- JSON
- HTTP::请求
这是我的代码。
my %data = (
"data" => {
"workspace" => "##########", #$config->get('asana/workspace_id'),
"name" => "system error",
"assignee" => "me",
"projects" => "##########",
},
);
my @header = ('Authorization' => 'Bearer '.$personal_access_token));
my $curl = WWW::Curl::Simple->new();
my $uri = $config->get('asana/api_uri');
my $content = JSON->new->utf8->encode(\%data);
my $r = HTTP::Request->new(
'POST',
$uri,
\@header,
$content
);
my $res = $curl->request($r);
当我打印 $content 变量时,它看起来像这样。
{"data":{"workspace":"##########","name":"CBC FZDS Billing - System Error"}}
当我将 $r 变量打印为字符串时,它看起来像这样。 ("personal access token" 显示我提供的个人访问令牌。)
POST https://app.asana.com/api/1.0/tasks
Authorization: Bearer <personal access token>
{"data":{"workspace":"##########","name":"CBC FZDS Billing - System Error"}}
$res->content
的结果是:
'{"errors":[{"message":"missing `workspace` field, and no `parent` or `projects` specified","help":"For more information on API status codes and how to handle them, read the docs on errors: https://asana.com/developers/documentation/getting-started/errors"}]}'
知道为什么这表明缺少工作区字段吗?
在我看来,您需要将 content-type header 设置为 "application/json",因为您发送的数据为 json。
为了帮助您调试未来的问题,您可以在命令行中尝试我们的 curl。 在这种特殊情况下,您会注意到,如果您添加 -H "Content-Type: application/json" 它会起作用,如果您不添加它,它将给您同样的错误。
(有效) curl -H "Authorization: Bearer ????" -X POST "https://app.asana.com/api/1.0/tasks" -d "{\"data\": { \"workspace\": ZZZZZZZ, \"name\": \"test\" }}" -H "Content-Type: application/json"
对比 (不起作用) curl -H "Authorization: Bearer ????" -X POST "https://app.asana.com/api/1.0/tasks" -d "{\"data\": { \"workspace\": ZZZZZZZ, \"name\": \"test\" }}"