php - 如何以正确的方式发布 cUrl 请求?
问题描述
我正在尝试向name.com API 发布请求并检查 PHP 中的域可用性。我真的有一个简单的测试请求。我浏览了他们的文档和 API,我收到的错误似乎没有解决方案。过去有人使用过他们的 API 吗?我究竟做错了什么?
选择域.php
if(isset($_POST['domain'])){
//get domain mae
$domain = $_POST['domain'];
//
//
$url = 'https://api.dev.name.com/v4/domains:checkAvailability';
$fields = array(
'username' => $username,
'password' => $password,
'token' => $name_token,
'domainNames' => array($domain)
);
//url-ify the data for the POST
$fields_string = http_build_query($fields);
//
//
//
//open connection
$ch = curl_init();
//
//
//
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
//execute post
$result_domain = curl_exec($ch);
//close connection
curl_close($ch);
}
API 响应
{"message":"Unauthenticated"}
根据他们的API ,此错误意味着以下内容:
URL 请求有一个尾随句点(name.com 之后的句点)示例:https://api.dev.name.com./v4/domains。或者,已输入密码但未输入用户名,反之亦然。
这根本不是真的,我的代码也不是这样。没有尾随期间。
解决方案
实际上,您发送的用户名和密码格式错误。username and password
API 端点期望采用用于身份验证的 BASICAUTH 格式,如https://www.name.com/api-docs/Domains#CheckAvailability中所述,但您发送的是原始数据或正文数据。
相反,您必须发送您username and password
的:
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
所以您的完整代码将如下所示:
if(isset($_POST['domain'])) {
//get domain mae
$domain = $_POST['domain'];
$url = 'https://api.dev.name.com/v4/domains:checkAvailability';
$fields = array(
'token' => $name_token,
'domainNames' => array($domain)
);
//url-ify the data for the POST
$fields_string = http_build_query($fields);
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
//execute post
$result_domain = curl_exec($ch);
//close connection
curl_close($ch);
}
推荐阅读
- python - 使用 os.popen 复制文件后读取文件的问题 - Python
- javascript - 是否有 javascript“任何值”选择器?
- office-js - 在 Outlook 加载项中发出 API 请求时出错
- amazon-web-services - S3/CloudFront DNS 主机不会仅在韩国 IP 中更新
- javascript - 如何将表单值修补到递归嵌套的 Angular 表单?
- c++ - 仅在 MacOS 上用于析构函数的未定义符号
- python - 使用 pyautogui 和数学在油漆中绘制棕褐色波
- amazon-web-services - 是否可以运行多个并行写入 S3 的 Spark Structured Streaming 作业?
- node.js - 为什么流式传输响应比在 Node.js / Express 中发送常规响应慢得多?
- html - 导航栏中的 Flexbox:无法垂直对齐项目