为什么GuzzleHttp尝试将端口80用于https?

时间:2017-01-22 19:57:13

标签: php laravel guzzlehttp

我尝试在Laravel 5.3应用程序中使用GuzzleHttp连接到https://api.example.com(请注意https)。

<?php

$client = new GuzzleHttp\Client();

$res = $client->request('GET', 'https://api.example.com/accounts', [
    'headers' => [
        'Accept' => 'application/json',
        'Authorization' => "Token $token"
    ]
]);

var_dump($res->getBody());

但是,我收到的错误是它无法在端口80(!)上连接,尽管网址中有https。即使我指定端口443(例如https://api.example.com:443/accounts),它仍然会给我关于端口80的错误:

cURL error 7: Failed to connect to api.example.com port 80:
Connection refused (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

为什么它不会在端口443上连接?为什么尝试连接端口80?

2 个答案:

答案 0 :(得分:2)

在这里回答我自己的问题。我对此进行了更多调查,发现我在申请if let id = (rowItem.valueForProperty(MPMediaItemPropertyAlbumPersistentID) as? NSNumber)?.unsignedLongLongValue { // ... } 时获得301 Moved Permanently / Location: http://api.example.com/accounts

我感到困惑的是为什么我会从https://api.example.com/accounts重定向到https,但发现问题在于api。事实证明你必须在最后添加一个斜杠。 http不会重定向到端口80,但可以正常工作。

答案 1 :(得分:0)

您是否错过了令牌变量的$(以及双引号)?

也许你的意思是'Authorization' => "Token {$token}"可能是因为错误的身份验证标头导致重定向