【问题标题】:Ingresso API {"error_message":"You must support \u0027gzip\u0027 to use F13"}Ingresso API {"error_message":"你必须支持\u0027gzip\u0027才能使用F13"}
【发布时间】:2018-12-12 12:44:08
【问题描述】:

API url 是 =,我正在尝试实现: https://docs.ingresso.co.uk/#basic-booking-flow

我的十月CMS代码,带有 GuzzleHttp\Client 对象。

    $credentials = base64_encode('demo:demopass');
    $client = new Client();
    $request_url = 'https://demo.ticketswitch.com/f13/events.v1/';
    $response = $client->request('GET', $request_url, [
        'headers' => ['Accept' => 'application/json','Authorization' => 'Basic ' . $credentials,],
        'auth'    => ['demo', 'demopass'],
        'timeout' => 120
    ])->getBody()->getContents();

    echo "<pre>";
    print_r($response);
    die();

发送请求得到的错误是

我正在阅读所有建议的问题,同时我正在添加我的问题标题并且没有关于该问题的任何线索或帮助...... 帮助.....

注意:任何用户或开发者都可以使用 Api 凭据,

【问题讨论】:

    标签: laravel curl gzip guzzle octobercms


    【解决方案1】:

    错误表明请求必须 gzip:“你必须支持gzip [使用这个API]”。

    这是通过发送到服务器的Accept-Encoding 标头控制的:

    Accept-Encoding 请求 HTTP 标头通告客户端能够理解的内容编码,通常是压缩算法。

    服务器强制执行此操作以确保客户端在使用 API 时通过使用压缩来节省带宽。这可以降低托管成本和/或提高请求性能。 F13 文档仅说明“gzip 必须用于所有请求”。

    Guzzle Request Options documentation 中介绍了启用 gzip 传输压缩的使用:

    // Request gzipped data and automatically decode/decompress it
    $client->request('GET', '/foo.js', [
        'headers'        => ['Accept-Encoding' => 'gzip'],
        'decode_content' => true  // default is true, added to be explicit
    ]);
    

    或者,更简单的

    // Pass "gzip" as the Accept-Encoding header and automatically decode/decompress
    $client->request('GET', '/foo.js', ['decode_content' => 'gzip']);
    

    当 [decode_content 设置] 为字符串时,响应的字节被解码,并且提供给 decode_content 选项的字符串值作为请求的 Accept-Encoding 标头传递。

    【讨论】:

    • 感谢@user2864740
    • @MuhammadAwaisZulifqar 其他标题/选项保持不变。把它们加在一起。使用更简单的'decode_content' =&gt; 'gzip' 方法应该会更简单、更清晰(即可以直接在timeout =&gt; 120 行下方添加)。
    • $response = $client->request('GET', $request_url, ['headers' => ['Accept-Encoding' => 'gzip','auth' => ['demo ', 'demopass']], 'decode_content' => true ])->getBody()->getContents();尝试这个但不起作用?
    • @MuhammadAwaisZulifqar 这是一个不同的错误吗?如果是这样,这是一个不同的问题。此外,该代码与问题中显示的代码不同。我非常怀疑'auth'是一个标题,所以这是一个倒退。
    • 酷。也可以写成:$client-&gt;request('GET', $request_url, [ 'decode_content' =&gt; 'gzip', 'auth' =&gt; ['demo', 'demopass'] ]);我首先“明确地”介绍了 Accept-Encoding 标头作为背景信息。
    猜你喜欢
    • 2022-08-19
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 2011-06-18
    • 2017-07-29
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多