0

ほぼ一日中、私はこの問題に苦しんでいます。

私は$result = curl_exec($ch);応答を読み取るために使用していますが、次のような Set-cookie ヘッダーを取得したいと考えています。

Set-Cookie: JSESSIONID=05a0c785d8e2f4856a3f844e3694; Path=/qos; HttpOnly rememberMe=deleteMe; Path=/qos; Max-Age=0; Expires=Thu, 06-Sep-2012 10:50:20 GMT rememberMe=x+8X9hDZEUwM23osStzBmHs6FV/4VJAy18j4gjswG0H9wYKtOsSLu4p4XQ2KjLReNN4V2NokyjT66QkWzYetsde /Gbvmb9iJgV3VsuCvRgFpEFsduig5wHwu0YXjVgQWheiK87+5CNQE1X06z8mbPKu2GZUE/vwUUraR66ZAfxPdRKM24NKJ7HV4UIAPspudvCTJzFRqfkwb+pw cqnslyB6Rb/LB+pqHx2oshnINTwNd1E25+Zjs8qGQFQnHRvI4mRGF+BHC1JPGBV2GD9F7K29+szUlAGJhKr7FtOV1ELhN4JMqP4yuGDH0Dt9naLbRr6oFxxB 9t1+N5gHKVOE0vL5VM54Is5nAnWmhUrx9r3+R99We5phw7XuE1svlcOq2XrVeRJthMy3Xfp70cobUBdN/bOh5/ih9/wg3XwpagsGUKf1raP9mGO4ShDd+NFg8Z+eC+80Yt2wkS+7ZH/UGNh73LkdtCv6WlgFqiB/po20Lu+gCbDEceKt+lTNlU2c1; Path=/qos; Max-Age=15724800; Expires=Fri, 08-Mar-2013 10:50:20 GMT; HttpOnly

それらを「;」で分割したい 文字。

編集:

以下の解決策は、私が想像するようには機能しませんでした。おそらく、結果に他のヘッダーがあるためです。

Status Code: 200 OK
Content-Length: 0
Date: Fri, 07 Sep 2012 10:50:20 GMT
Server: GlassFish Server Open Source Edition 3.1.1
Set-Cookie: JSESSIONID=05a0c785d8e2f4856a3f844e3694; Path=/qos; HttpOnly rememberMe=deleteMe; Path=/qos; Max-Age=0; Expires=Thu, 06-Sep-2012 10:50:20 GMT rememberMe=x+8X9hDZEUwM23osStzBmHs6FV/4VJAy18j4gjswG0H9wYKtOsSLu4p4XQ2KjLReNN4V2NokyjT66QkWzYetsde /Gbvmb9iJgV3VsuCvRgFpEFsduig5wHwu0YXjVgQWheiK87+5CNQE1X06z8mbPKu2GZUE/vwUUraR66ZAfxPdRKM24NKJ7HV4UIAPspudvCTJzFRqfkwb+pw cqnslyB6Rb/LB+pqHx2oshnINTwNd1E25+Zjs8qGQFQnHRvI4mRGF+BHC1JPGBV2GD9F7K29+szUlAGJhKr7FtOV1ELhN4JMqP4yuGDH0Dt9naLbRr6oFxxB 9t1+N5gHKVOE0vL5VM54Is5nAnWmhUrx9r3+R99We5phw7XuE1svlcOq2XrVeRJthMy3Xfp70cobUBdN/bOh5/ih9/wg3XwpagsGUKf1raP9mGO4ShDd+NFg8Z+eC+80Yt2wkS+7ZH/UGNh73LkdtCv6WlgFqiB/po20Lu+gCbDEceKt+lTNlU2c1; Path=/qos; Max-Age=15724800; Expires=Fri, 08-Mar-2013 10:50:20 GMT; HttpOnly

そして、私は Set-cookie だけが必要です

4

3 に答える 3

1

curl_exec()次の行を使用して、結果のすべての要素の配列を取得します。

$parsedResult = explode('; ', $result);

curl_exec()';で結果を分割できることに注意してください。'。

Set-Cookie次に、次のようにして値にアクセスできます。

$setCookieValue = substr("Set-Cookie: ", "", $parsedResult[0]);

基本的に、$ parsedResult配列の最初の要素を取得し、そこから「Set-Cookie:」を削除します。

于 2012-09-07T12:24:19.673 に答える
1

次のように、 explode()を使用して文字列を分割します。

$dataArray = explode('; ', $result);

結果の $dataArray は、すべての部分を含む配列です。

于 2012-09-07T12:19:37.087 に答える
0

ついに私はそのための魂を見つけました。1回の爆発では不十分でした。

$parsedHeaders = http_parse_headers($result);
$set_cookie_header = $parsedHeaders['Set-Cookie'];
$cookie = $set_cookie_header[0];
$cookie = $cookie[0];
$cookie = explode('; ', $cookie);
$cookie = $cookie[0];
$cookie = substr($cookie, 11); 

そして、php.netの例から取得したhttp_parse_headersは、次のようになります。

function http_parse_headers( $header )
{
        $retVal = array();
        $fields = explode("\r\n", preg_replace('/\x0D\x0A[\x09\x20]+/', ' ', $header));
        foreach( $fields as $field ) {
            if( preg_match('/([^:]+): (.+)/m', $field, $match) ) {
                $match[1] = preg_replace('/(?<=^|[\x09\x20\x2D])./e', 'strtoupper("\0")', strtolower(trim($match[1])));
                if( isset($retVal[$match[1]]) ) {
                    $retVal[$match[1]] = array($retVal[$match[1]], $match[2]);
                } else {
                    $retVal[$match[1]] = trim($match[2]);
                }
            }
        }
        return $retVal;
}

将来誰かに役立つことを願っています。

于 2012-09-12T16:52:16.910 に答える