无法打开流: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,所以我不确定我是否使用PHP中的array()方法正确地构建了JSON负载。

出于明显的安全原因,我下面的代码更改了$https_user$https_password$url域。在我实际的PHP代码中,我使用了Postman中使用的相同凭据和域。

CCD_ 6除了用于未来请求的标识号之外没有其他实际用途。对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/jsonrn'.
"Authorization: Basic ".base64_encode("$https_user:$https_password")."rn",
'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
);

相关内容

最新更新