为什么这个请求在 apikitchen 中有效,但在我的 php 脚本中不起作用


Why does this requests work in apikitchen but not in my php script?

我一直在使用apikitchen对api进行逆向工程,但我不熟悉php中的curl库。 我想知道是否有人可以解释为什么当我在 php 中使用 curl 时我发出的请求返回 401 错误,但它在 api kitchen 上工作正常。

在 api kitchen 中添加标头并点击执行后,我的请求标头如下所示(我刚刚在 apikitchen 中添加了 deviceId 和授权标头):

Host: somesubdomain.somedomain.com
Deviceid: someID
Authorization: Token someID
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0

我指向的主机在示例中显然是假的。 真正的主机使用 GET 请求获取公司名称/订单号,然后使用 deviceID 和授权令牌对用户进行身份验证。

这是我用于 php 脚本的代码:

<?php
echo 'starting...';
$curl = curl_init('https://somesubdomain.somedomain.com/ws/orders?wildcard=0804400');
$headers = array('deviceId'=>'someID',
                    'Authorization'=>'Token someID',
                    'Host'=>'somesubdomain.somedomain.com');
$options = array(CURLOPT_RETURNTRANSFER=>1,
                    CURLOPT_VERBOSE=>1,
                    CURLOPT_USERAGENT=>'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0',
                    CURLOPT_HTTPHEADER=>$headers);
curl_setopt_array($curl, $options);
echo curl_getinfo($curl);
$response = curl_exec($curl);
if(!$response){
    echo curl_getinfo($curl);
    die('ERROR: "' . curl_error($curl) . '" - CODE: ' . curl_errno($curl));
}else{
    echo $response;
}
curl_close($curl);
echo "<br>Done!";
?>

但我得到的只是一个 401 错误:

type Status report
message
description This request requires HTTP authentication ().

就像我之前说的,使用相同的确切登录凭据在 api kitchen 中有效,但是当我使用 curl 组装请求时,它不会。

任何帮助不胜感激!

可能是身份验证格式不正确。你需要做类似的事情

$headers = array('deviceId:someID',
                    'Authorization:Token someID',
                    'Host:somesubdomain.somedomain.com');