php - 无法打开流:HTTP 请求失败!HTTP/1.1 400 错误请求 - PHP 错误
问题描述
解决方案:我的有效负载正文的 JSON 数据格式错误。"ttl" => 30
是在不正确的 array() 方法中。将来这可能对任何人都没有帮助,移动 ttl 键/值对使其正常工作,如下所示。
$data = array(
"statement" => array(
"actor" => array(
"mbox" => "mailto:test@example.com"
),
),
"ttl" => 30
);
我检查了许多其他 StackOverflow 问题,但找不到有效的解决方案。我应该注意,我正在使用在端口 8080 上运行的本地 XAMPP 服务器进行测试。不确定这是否重要。我已经能够使用 Postman 来完成这项工作,但是将其转换为 PHP 一直存在问题。我错过了什么吗?我对 PHP 不是很熟悉,但工作需要这个。
编辑:有关 API 期望的更多信息。这是一个相当简单的 API,需要一个 JSON 主体、一个基本授权标头和一个 Content-Type:application/json。
这是我在 Postman 中使用的 JSON 正文。这是 Postman 的直接复制/粘贴,它与 API 成功通信:
{
"statement": {
"actor": {
"mbox": "mailto:test@example.com"
}
},
"ttl": 30
}
我下面的 PHP 代码中是否存在语法错误?同样,我正在动态学习 PHP,所以我不确定我是否使用array()
PHP 中的方法正确构建了 JSON 有效负载。
出于明显的安全原因,我下面的代码更改了$https_user
,$https_password
和domain 。$url
在我的实际 PHP 代码中,我拥有 Postman 中使用的相同凭据和域。
除了为将来的$randomSessionID
请求提供标识号之外,它没有任何实际用途。对 API 响应失败或成功没有影响。
<?php
$https_user = 'username';
$https_password = 'password';
$randomSessionID = floor((mt_rand() / mt_getrandmax()) * 10000000);
$url = 'https://www.example.com/session/' . $randomSessionID . '/launch';
$json = json_encode(array(
"statement" => array(
"actor" => array(
"mbox" => "mailto:test@example.com"
),"ttl" => 30
)
));
$options = array(
'http' => array(
'method' => 'POST',
'header' => 'Content-Type: application/json\r\n'.
"Authorization: Basic ".base64_encode("$https_user:$https_password")."\r\n",
'content' => $json
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if ($result === FALSE) { /* Handle error */ }
?>
解决方案
解决方案:我的有效负载正文的 JSON 数据格式错误。"ttl" => 30
是在不正确的 array() 方法中。这可能对将来的任何人都没有帮助,但是移动 ttl 键/值对可以使其正常工作,如下所示。
$data = array(
"statement" => array(
"actor" => array(
"mbox" => "mailto:test@example.com"
),
),
"ttl" => 30
);
推荐阅读
- json - 有没有办法在 Grails 中使用 Marshaller 将 JSON 字符串解析为自定义对象
- javascript - Express.js 为什么放置 app.use() 会影响测试结果?
- typescript - Nestjs Swagger - import types wrong node module
- javascript - Is it possible to make POST/Update request at selected hour? ReactJS
- javascript - 如何在javascript中更改项目颜色?
- c++ - C++ Builder: Pass Onclick-Event of Button on Form1 to Button on Form2
- java - Amazon FireTV get name of device
- android - ProgressBar 从代码中不会在 Android Studio 中可见
- python - 将来自不同excel文件的工作表加入一个工作簿python
- json - curl POST没有给我结果