2015-10-20 3 views
1

Я использую Mailchimp api 1.3 php wrapper. Проблема в том, что сервер, на котором мой клиент размещает сайт, будет кэшировать ответ, он даже не сделает api-вызов. Точный тот же код работает со мной и другими клиентами:Проблема с кэшем PHP при отправке данных с использованием fsockopen

$api = new MCAPI($apiKey); 
$doubleOptin = false;   
$mergeVar = array(
'FNAME' => '', 
'LNAME' => '' 
);      
$api->listSubscribe($listId, $email, $mergeVar, 'html', $doubleOptin); 
print_r($api); 

методом listSubscribe() вызывает метод callServer, где я думаю, это проблема:

$payload = "POST " . $this->apiUrl["path"] . "?" . $this->apiUrl["query"] . "&method=" . $method . " HTTP/1.0\r\n"; 
    $payload .= "Host: " . $host . "\r\n"; 
    $payload .= "User-Agent: MCAPI/" . $this->version ."\r\n"; 
    $payload .= "Content-type: application/x-www-form-urlencoded\r\n"; 
    $payload .= "Content-length: " . strlen($post_vars) . "\r\n"; 
    $payload .= "Connection: close \r\n\r\n"; 
    $payload .= $post_vars; 

    ob_start(); 
    if ($this->secure){ 
     $sock = fsockopen("ssl://".$host, 443, $errno, $errstr, 30); 
    } else { 
     $sock = fsockopen($host, 80, $errno, $errstr, 30); 
    }  
    if(!$sock) { 
     $this->errorMessage = "Could not connect (ERR $errno: $errstr)"; 
     $this->errorCode = "-99"; 
     ob_end_clean(); 
     return false; 
    } 

    $response = ""; 
    fwrite($sock, $payload); 
    stream_set_timeout($sock, $this->timeout); 
    $info = stream_get_meta_data($sock); 
    while ((!feof($sock)) && (!$info["timed_out"])) { 
     $response .= fread($sock, $this->chunkSize); 
     $info = stream_get_meta_data($sock); 
    } 
    var_dump($response); exit; 

не Кто-нибудь есть какие-либо идеи, почему fsockopen и FWRITE никогда отправляет звонок в Mailchimp? Странно то, что я действительно могу читать $ response, но он всегда один и тот же из кеша.

+0

Это звучит как-то с вашим хостинг-провайдером. Кэширование ответов POST действительно, очень плохое. – TooMuchPete

ответ

0

Если код работает для вас и есть кеширование запросов, вы можете попробовать добавить временную метку к запросу.

"&time=".time() 

Таким образом, у вас всегда есть «свежий» запрос.

+0

Я добавил, что раньше и это не решило проблему, возможно потому, что это POST, а не GET, поэтому URL-адрес остается неизменным. – JohnyFree

+0

Поместите «время» в URL-адрес, даже с помощью POST. – TooMuchPete

Смежные вопросы