【问题标题】:Trouble to use API V2 Moz HTTP Request无法使用 API V2 Moz HTTP 请求
【发布时间】:2022-10-18 14:56:56
【问题描述】:

我正在尝试通过文件获取内容功能使用 HTTP 请求连接到 Moz API V2,但我是新手……你们能帮帮我吗?

他们的文档中的示例 HTTP 请求:

POST /v2/url_metrics
Host: lsapi.seomoz.com
Content-Length: [length of request payload in bytes]
User-Agent: [user agent string]
Authorization: Basic [credentials]
{
    "targets": ["facebook.com"]
}

这是我正在尝试的代码:

$url = 'https://lsapi.seomoz.com/v2/url_metrics';
$domains = json_encode(['targets' => 'moz.com']);

$opts = ['http' =>
    [
        'method' => 'POST',
        'header' => 'Content-Type: application/x-www-form-urlencoded\r\n'.
            ("Authorization: Basic " . base64_encode("mozscape-XXXXX:XXXXX")),
        'content-length' => strlen($domains),
        'user-agent' => $_SERVER['HTTP_USER_AGENT'],
        'content' => $domains,
    ]
];

$context = stream_context_create($opts);
$result = file_get_contents($url, false, $context);

print_r($result);

这是文档的链接:https://moz.com/help/links-api/making-calls/url-metrics

打印结果时我什么也没得到,可能我缺少一些参数...... :(

感谢您的时间 :)

【问题讨论】:

  • 调用 API 时出现了什么问题?
  • 我不知道在哪里插入正文内容、目标域、当我签入面板请求时 API 不发出请求
  • 您可以通过post 请求而不是get 请求发送正文内容
  • 是的,我已经更新了请求的类型,那么我应该在 cURL 中的哪里插入正文内容?
  • 另一件事,你知道那部分例子中的“-u”是什么意思吗:“POST lsapi.seomoz.com/v2/url_metrics -u”

标签: php api curl


【解决方案1】:

很可能您只是提出了一个无效的请求。您将内容类型声明为application/x-www-form-urlencoded,但将数据发送为application/json

您还需要基本的错误处理(例如,在凭据无效的情况下)。

我会这样写:

$url = 'https://lsapi.seomoz.com/v2/url_metrics';
$content = json_encode(['targets' => 'moz.com']);

$opts = ['http' => [
    'method' => 'POST',
    'content' => $content,
    'header' => implode("
", [
        'Authorization: Basic ' . base64_encode("mozscape-XXXXX:XXXXX"),
        'Content-Type: application/json',
        'Content-Length: ' . strlen($content),
        'User-Agent: ' . $_SERVER['HTTP_USER_AGENT'],
    ]),
]];

$stream = fopen($url, 'r', false, stream_context_create($opts));

if (!is_resource($stream)) {
    die('The call failed');
}

// header information as well as meta data
// about the stream
var_dump(stream_get_meta_data($stream));

// actual data
var_dump(stream_get_contents($stream));

// free resources
fclose($stream);

老实说,sockets & fopen 是相当低级的。您最好使用抽象层:例如Guzzle

【讨论】:

  • 您好混音,非常感谢您抽出宝贵的时间,呵呵,我从中得到的输出是呼叫失败;(
  • 你知道什么是错的吗?
  • 我在 MOZ 的面板中看到,请求正在运行,但没有打印任何行
【解决方案2】:

抱歉,我之前忘记在这里发布迟到的解决方案...

也许有人正在寻找如何将 moz API V2 与 PHP 一起使用...

$username='Access ID';
$password='Secret Key';
$URL='https://lsapi.seomoz.com/v2/url_metrics';
$payload = json_encode(array("targets" => ["moz.com"]));

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$URL);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //timeout after 30 seconds
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
$result=curl_exec ($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);   //get status code
curl_close ($ch);


print_r(json_decode($result, true));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    相关资源
    最近更新 更多