【问题标题】:Malformed Session ID Cookie格式错误的会话 ID Cookie
【发布时间】:2016-06-01 20:04:11
【问题描述】:
Set-Cookie: SESSIONID=836cfc64b5856712b040a0b1b3bf4237; Secure; HttpOnly
Set-Cookie: Watson-DPAT=gBJQjAG%2FYflxpHKCwJVswQPEBuUmikj38zzFm8UZNTbOERxbeXS4WVxBIT5JetJBkeO1RT16PNz6%2BI17oFrEqvxjny%2FifZRorvBxXVzDmFkRpfRLxxj6ZNvFCvuRL1DtfW3nL8Ne1QDwpuKQmNt8%2BD9vFk7bGjlaziHT0ZFhNffWJT7FRCWbuJAyjKd%2BQui2WTIl6B8KglPi6GG1buh5UPDE%2Bc8OvrqyAfJRfYOApRdx7kHhtHdxIV7g%2FzNExXhafScqxi4cWEa5Kg9YGcypr8SIO%2FD7WOq0KyERHUDkbZatH53CCii25it5XD0plnt3cVc4bWs8tXkMT82V9DwCYULto64L%2BgNh30iTpyv72xOIfHeZTt2KISfhXMy6z86ueaJZzNd4nS6rwc7s2E8ldxwYLXrCU996xsLmzPYbGSzaeFLplG7c%2BCxzTlAll5fn8eMMbGn30W%2BrXLNtcaJ3lRK2nvzQCim1GhMdqoOvOcSvPWiJoVBrF8lc75eGSr8C%2Fovq20fOk3NDw4f0UPfBEGZYuAtXjonU7QdRhSgLRXxKyGvcYHEWeWUOQ2kvtI2m%2FRD%2BMRx9384p1v6uu8XfaU16IqoidV0Vew3MLPW4fxcOWRqnWKy0iIYbIJrWVcigloIy%2FNxgO7oHW7aacgH1u8IluAURz5AiE1Bej4l%2FjAI91IUTEssbg6fsXd3AqmlkixDglDJBgTEtMoXhXVyDjvJSaVUqdFTokP3YcRNhlTzqDQ3vG8txTLzECsyQHZ7DgWp%2B98P3zjvtad9xB%2BDzXhF4CaUB7ve99bWO5FO1DU3KRhx7pEAKGselDCoxTOkjIhEMMJbeQrbC1QWJ4uR9KlBPBdIbShd3; path=/speech-to-text/api; secure; HttpOnly

创建 Speech to Text 会话的请求有效。

{
   "recognize": "https://stream.watsonplatform.net/speech-to-text/api/v1/sessions/836cfc64b5856712b040a0b1b3bf4237/recognize",
   "recognizeWS": "wss://stream.watsonplatform.net/speech-to-text/api/v1/sessions/836cfc64b5856712b040a0b1b3bf4237/recognize",
   "observe_result": "https://stream.watsonplatform.net/speech-to-text/api/v1/sessions/836cfc64b5856712b040a0b1b3bf4237/observe_result",
   "session_id": "836cfc64b5856712b040a0b1b3bf4237",
   "new_session_uri": "https://stream.watsonplatform.net/speech-to-text/api/v1/sessions/836cfc64b5856712b040a0b1b3bf4237"
}

然后我尝试获取会话的状态以确保状态为“已初始化”,但我收到“格式错误的会话 ID Cookie”错误。

GET /speech-to-text/api/v1/sessions/836cfc64b5856712b040a0b1b3bf4237/recognize HTTP/1.1\x0d
Content-Length: 0\x0d
Accept-Encoding: gzip\x0d
Authorization: Basic OGIyMTk0MDYtYWYzYS00YTFhLWExYmMtZDA3ZjNlNTY2Y2JmOm1lYmpBaG1ndkhMSw==\x0d
Cookie: SESSIONID=836cfc64b5856712b040a0b1b3bf4237; Watson-DPAT=gBJQjAG%2FYflxpHKCwJVswQPEBuUmikj38zzFm8UZNTbOERxbeXS4WVxBIT5JetJBkeO1RT16PNz6%2BI17oFrEqvxjny%2FifZRorvBxXVzDmFkRpfRLxxj6ZNvFCvuRL1DtfW3nL8Ne1QDwpuKQmNt8%2BD9vFk7bGjlaziHT0ZFhNffWJT7FRCWbuJAyjKd%2BQui2WTIl6B8KglPi6GG1buh5UPDE%2Bc8OvrqyAfJRfYOApRdx7kHhtHdxIV7g%2FzNExXhafScqxi4cWEa5Kg9YGcypr8SIO%2FD7WOq0KyERHUDkbZatH53CCii25it5XD0plnt3cVc4bWs8tXkMT82V9DwCYULto64L%2BgNh30iTpyv72xOIfHeZTt2KISfhXMy6z86ueaJZzNd4nS6rwc7s2E8ldxwYLXrCU996xsLmzPYbGSzaeFLplG7c%2BCxzTlAll5fn8eMMbGn30W%2BrXLNtcaJ3lRK2nvzQCim1GhMdqoOvOcSvPWiJoVBrF8lc75eGSr8C%2Fovq20fOk3NDw4f0UPfBEGZYuAtXjonU7QdRhSgLRXxKyGvcYHEWeWUOQ2kvtI2m%2FRD%2BMRx9384p1v6uu8XfaU16IqoidV0Vew3MLPW4fxcOWRqnWKy0iIYbIJrWVcigloIy%2FNxgO7oHW7aacgH1u8IluAURz5AiE1Bej4l%2FjAI91IUTEssbg6fsXd3AqmlkixDglDJBgTEtMoXhXVyDjvJSaVUqdFTokP3YcRNhlTzqDQ3vG8txTLzECsyQHZ7DgWp%2B98P3zjvtad9xB%2BDzXhF4CaUB7ve99bWO5FO1DU3KRhx7pEAKGselDCoxTOkjIhEMMJbeQrbC1QWJ4uR9KlBPBdIbShd3\x0d
User-Agent: Mojolicious (Perl)\x0d
Host: stream.watsonplatform.net\x0d

HTTP/1.1 400 Bad Request\x0d
X-Backside-Transport: FAIL FAIL\x0d
Connection: Keep-Alive\x0d
Transfer-Encoding: chunked\x0d
X-Error-Cause: Zuul Error: Malformed Session ID Cookie\x0d
Content-Type: application/json\x0d
Date: Wed, 01 Jun 2016 19:41:26 GMT\x0d
Server: -\x0d
X-Global-Transaction-ID: 237895544\x0d
X-DP-Watson-Tran-ID: stream-dp01-c0182762-b9fe-4533-acab-7fbeb02b63dd\x0d

代码使用 Mojo::UserAgent 的单个实例,因此每个请求都会维护 cookie。

【问题讨论】:

    标签: perl ibm-cloud speech-to-text mojolicious ibm-watson


    【解决方案1】:

    使用会话时,您会在创建会话时收到一个 SESSIONID cookie,您需要在创建会话后每次调用时将该 cookie 发送回服务。请注意,该 cookie 的值不等于“session_id”:“836cfc64b5856712b040a0b1b3bf4237”,它是一个较长的字母数字字符串。

    顺便说一句。你为什么使用会话?你的用例是什么?也许您可以从无会话调用(更简单)或 websockets(更适合实时用例)中受益

    丹妮

    【讨论】:

    • 无会话工作正常。我无法通过我无法控制的防火墙获取 websocket。由于我正在尝试从移动设备发送录音片段,我认为这些会话可能会更好。上面的 MOJO_USERAGENT_DEBUG 输出显示了在 GET 请求上发送的 SESSIONID cookie。也许不需要“Watson-DPAT”cookie。
    • 请确保您在 GET 上发送的 SESSIONID cookie 的值与您通过 POST 创建会话时获得的 SESSIONID cookie 的值逐字符匹配
    【解决方案2】:

    使用尾部斜杠是导致此错误的原因。有趣的是,带有斜杠 URL 的“开始会话”POST 请求将成功并返回正确的 JSON 数据。获取会话状态的下一个请求将失败。不是真正的代码问题。我还演示了 curl 的问题。

    my $ua = Mojo::UserAgent->new();
    $ua->proxy->detect();
    $ua->inactivity_timeout(0);
    
    # THIS URL WORKS - no trailing slash
    my $start_session_url = "https://${watson_username}:${watson_password}\@stream.watsonplatform.net/speech-to-text/api/v1/sessions";
    # THIS URL DOES NOT WORK - with trailing slash
    # my $start_session_url = "https://${watson_username}:${watson_password}\@stream.watsonplatform.net/speech-to-text/api/v1/sessions/";
    
    my $session_tx = $ua->post($start_session_url);
    
    my $response;
    my $recognize_url;
    
    if($response = $session_tx->success) {
         print Dumper($response->json);
         $recognize_url = $response->json->{recognize};
    } else {
         die "Failure to start session";
    }
    
    $recognize_url =~ s/https:\/\//https:\/\/${watson_username}:${watson_password}\@/;
    
    # Malformed Cookie error happens here
    my $status_tx = $ua->get($recognize_url);
    
    if($response = $status_tx->success) {
        print Dumper($response->json);
    } else {
        die "Failure to get session status";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 2023-03-10
      • 2013-04-28
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多