Linkedin Marketing API 3月31日查询更新



一些人可能知道,Linkedin Marketing API宣布他们将从2021年3月31日开始拒绝不符合新标准的API调用。所以我开始更新我的服务。然而,有这样一个问题。文档中给出的示例CURL命令不起作用。相关公告

你以前遇到过这样的问题吗?如果我需要给你看几个例子:

curl -X POST https://api.linkedin.com/v2/adCreativesV2 
-H 'X-HTTP-Method-Override: PUT' 
-H 'Content-Type: multipart/mixed; boundary=xyz;' 
-H 'X-RestLi-Method: BATCH_PARTIAL_UPDATE' 
-H 'Authorization: Bearer access_token' 
-H 'X-RestLi-Protocol-Version: 2.0.0' 
--data $'--xyzrnContent-Type: application/jsonrnrn{"entities": {{"47770196": {"patch": {"$set": {"status": "ACTIVE"}}}}}}rn--xyz--'

反应:

{
"serviceErrorCode": 0,
"message": "Invalid tunneled request - Missing start boundary",
"status": 400
}

文档中提到的GET请求转换为POST的示例工作得很好,但是POST请求中使用的标头:-H Content-Type: multipart / mixed; boundary = xyz;导致了问题。

编辑:

正如Matteo在下面说的,问题是在rn,但是,我在我的应用程序中使用PHP CURL。我不知道如何将rn转换为回车。下面是一个用法示例:

$ch = curl_init();
$jsonData = "
--xyz
Content-Type: application/json" 
. json_encode($parameters, JSON_UNESCAPED_SLASHES)
. 
"--xyz--";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt(
$ch,
CURLOPT_HTTPHEADER,
[
'Authorization Bearer $access_token',
'Content-Type: multipart/mixed; boundary=xyz;',
'X-RestLi-Protocol-Version: 2.0.0',
'X-HTTP-Method-Override: PUT'
]);
$result = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);

尝试用回车符翻译每个rn,例如:

curl -X POST 'https://api.linkedin.com/v2/adCreativesV2' 
-H "X-HTTP-Method-Override: PUT" 
-H "Content-Type: multipart/mixed; boundary=xyz" 
-H "X-RestLi-Method: BATCH_PARTIAL_UPDATE" 
-H "X-RestLi-Protocol-Version: 2.0.0 " 
--data $'--xyzrnContent-Type: application/x-www-form-urlencoded
ids=List(123)
--xyz
Content-Type: application/json
{"entities": {{"123": {"patch": {"$set": {"status": "ACTIVE"}}}}}}
--xyz--'

看这里的动作

有关更多信息,请参阅有关multipart如何工作的规范

PS:这不是我第一次在linkedin文档中发现问题了

编辑:

示例代码:
<?php
$ch = curl_init();
$url = "https://api.linkedin.com/v2/adCreativesV2";
$parameters = [
"entities" => [
[
[
"47770196" => [
"patch" => [
"$set" => [
"status" => "ACTIVE",
],
],
],
],
],
],
];
$jsonData = "
--xyz
Content-Type: application/json"
. json_encode($parameters, JSON_UNESCAPED_SLASHES)
.
"--xyz--";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt(
$ch,
CURLOPT_HTTPHEADER,
[
'Authorization Bearer $access_token',
'Content-Type: multipart/mixed; boundary=xyz;',
'X-RestLi-Protocol-Version: 2.0.0',
'X-HTTP-Method-Override: PUT'
]);
$result = curl_exec($ch);
$error = curl_error($ch);
print_r($result);
print_r($error);

curl_close($ch);

与打印:

>php -f src/ln.php
{"serviceErrorCode":65604,"message":"Empty oauth2 access token","status":401}%