Heim  >  Artikel  >  Backend-Entwicklung  >  Nachdem PHP Curl verwendet hat, um die Anmeldung zu simulieren, wie kann man bei mehreren Benutzern deren Anmeldecookies speichern? Ohne Dateien zu schreiben

Nachdem PHP Curl verwendet hat, um die Anmeldung zu simulieren, wie kann man bei mehreren Benutzern deren Anmeldecookies speichern? Ohne Dateien zu schreiben

WBOY
WBOYOriginal
2016-08-04 09:19:20830Durchsuche

Kürzlich möchte Tefaqi eine Curl-Webanwendung erstellen. Wie können sie ihre Anmeldecookies speichern und ihre Cookies für den nächsten Curl-Vorgang abrufen, ohne die Cookies in eine Datei zu schreiben?
Ich habe mir die folgende Lösung überlegt:
Speichern Sie es im Memcache und verwenden Sie die Sitzungs-ID als Schlüssel für den Memcache (ich weiß nicht, ob diese Lösung machbar ist)

Antwortinhalt:

Kürzlich möchte Tefaqi eine Curl-Webanwendung erstellen. Wie können sie ihre Anmeldecookies speichern und ihre Cookies für den nächsten Curl-Vorgang abrufen, ohne die Cookies in eine Datei zu schreiben?
Ich habe mir die folgende Lösung überlegt:
Speichern Sie es im Memcache und verwenden Sie die Sitzungs-ID als Schlüssel für den Memcache (ich weiß nicht, ob diese Lösung machbar ist)

Ich vermute, das liegt daran, dass der Sitzungsstatus des Benutzers nach der simulierten Anmeldung nicht gespeichert werden kann. Die eine besteht darin, ihn in einer Datei zu speichern, was für die Leistungsanforderungen nicht besonders gut ist Zweitens muss der Cookie-Wert im Sitzungs- oder anderen Cache gespeichert werden. Voraussetzung ist jedoch, dass der von der ursprünglichen Website-Antwort zurückgegebene Antwortheader das Set-Cookie-Element enthält. Gehen wir ohne weitere Umschweife direkt zum Code.

<code>function curlFetch($url, $data = null ,$referer = ""){
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回字符串,而非直接输出
    curl_setopt($ch, CURLOPT_HEADER, 1);   // 返回header部分
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);   // 设置socket连接超时时间
    if (!empty($referer))
    {
        curl_setopt($ch, CURLOPT_REFERER, $referer);   // 设置引用网址
    }
    $cookie_str=session('servlet');
    if(!empty($cookie_str)){
        curl_setopt($ch, CURLOPT_COOKIE , $cookie_str);
    }

    if (is_null($data))
    {
        // GET
    }
    else if (is_string($data))
    {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        // POST
    }
    else if (is_array($data))
    {
        // POST
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    }
    set_time_limit(120); // 设置自己服务器超时时间
    $str = curl_exec($ch);
    curl_close($ch);

    list($header, $body) = explode("\r\n\r\n", $str);
    // 解析COOKIE
    preg_match("/Set-Cookie:(.*);/iU", $header, $matches);

    if(!empty($matches) && empty($cookie_str)){
        $cookies=$matches[1];    //这里是你需要保存cookie
        session('servlet',$cookies);    //我这里将其保存在session中
    }
    return $body;    //页面所得到的数据
}</code>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn