繁体   English   中英

如何在两个 php 进程之间保持 curl 会话?

[英]How to keep curl session alive between two php processes?

当 php 进程存在时,我可以保存会话并以登录用户身份浏览网站。 那没问题。

这是我的工作代码:

$options = array(
            CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:38.0) Gecko/20100101 Firefox/38.0',
            CURLOPT_URL            => $url,
            CURLOPT_HEADER         => true,
            CURLOPT_VERBOSE        => true,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_FOLLOWLOCATION => false,
            CURLOPT_SSL_VERIFYHOST => false,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_REFERER        => 'http://website.com/',
            CURLOPT_POST           => 1,
            CURLOPT_POSTFIELDS     => http_build_query($post),

            CURLOPT_COOKIESESSION   => true,
            CURLOPT_COOKIEJAR       => __DIR__ . '/cookie-name',
            CURLOPT_COOKIEFILE      => '',
            CURLOPT_HTTPHEADER      => array(
                'Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"',
                'Accept-Language: "en-US,en;q=0.5"',
                'Connection: "keep-alive"',
                'Cache-Control: "max-age=0"'
            )
        );

    $ch = curl_init();

    curl_setopt_array( $ch, $options );

    try {
        $raw_response  = curl_exec( $ch );

        if(curl_errno($ch))
            throw new Exception(curl_error($ch), 500);

        $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

        if ($status_code != 200)
            throw new Exception("Response with Status Code [" . $status_code . "].", 500);

    } catch(Exception $ex) {
        if ($ch != null) curl_close($ch);
        throw new Exception($ex);
    }

现在我们有$ch资源可以将它用于其他请求。 但它仍然在一个 php 会话中使用 curl 对象。 如果我需要在不同的 php 进程中使用这个会话怎么办? 是否可以?

不。PHP 基本上是一个无状态的应用程序。 可以通过数据库或内存缓存在其他 php 进程中重用已初始化的数据,但是每次启动新进程时都必须重新初始化资源会话。

如果由于某种原因能够使用同一个会话非常重要,那么您可以考虑编写一个持续运行的守护进程,在后台处理来自 apache 服务器的排队请求,接受和响应来自服务器的请求一个循环。

我想出了它是如何工作的)如果你想保持会话,只需将set-cookie选项从标头响应复制到某个文件。 之后,您可以使用此 cookie 进行下一次连接。 您不必再次进行授权。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM