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)
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>