3

我想使用 php 脚本访问 oauth 服务器,远程服务器需要以下请求:

POST /oauth/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 81
Authorization: Basic CHAINE_ENCODEE 
grant_type=password&username=USERNAME&password=PASSWORD&scope=all

所以我写了以下代码:

    $params = array ('grant_type' => 'password', 
                     'username'   => 'USERNAME',
                     'password'   => hash('sha256', 'PASSWORD'),
                     'scope'      => 'all',
                     );

    $query = http_build_query ($params);

    $contextData = array ( 
                    'protocol_version'=> '1.1',
                    'method'          => 'POST',
                    'header'          => "Connection: close\r\n".
                                         "Content-Type: application/x-www-form-urlencoded\r\n".
                                         "Content-Length: 81\r\n".
                                         "Authorization: Basic ".base64_encode('APPIDENTIFIER:SECRET'),
                    'content'         => $query );

    $context = stream_context_create (array ( 'http' => $contextData ));

    $result =  file_get_contents (
                      'https://rest2.some-url.net/oauth/token',  // page url
                      false,
                      $context);

    return $result;

但这给了我以下错误:

Warning: file_get_contents(https://rest2.some-url.net/oauth/token): failed to open stream: 
HTTP request failed! HTTP/1.0 500 Internal Server Error

我的猜测是问题来自我根据 api 要求设置为 1.1 的协议版本。但错误显然使用了 HTTP/1.0

我已经尝试了所有可能的方法,我没有看到有人说这对他们不起作用,所以我想我错过了一些东西。为什么 HTTP 没有设置为 HTTP/1.1?

4

0 回答 0