Intereting Posts
Ошибка с формой PHP – Нефункциональный Как загрузить файл на Google Диск с помощью учетной записи службы в PHP? PHP cURL, как добавить значение User Agent или прервать серверы, блокирующие запросы cURL? Организация ошибок в списке опций с использованием вложенного расширения дерева после обновления Удалить строку из базы данных, если изображение не на сервере Разбирайте XML последовательно в PHP Как создать первый PHP-расширение в C на Linux GCC? У меня есть строка с "\ u00a0", и мне нужно заменить ее на "" str_replace не удается Сродство между текстом и списком ключевых слов? Вход с Amazon говорит, что пользователь не согласился, но у них есть – Alexa SMAPI Как работает PHP-соединение с firebase? изменить путь PHP к MAMPs PHP Как использовать черты в Laravel 5.4.18? Преобразование земных километров в радианы в php Сделать элемент userid в массиве в качестве родительского ключа php

Проблема PHP Curl и setcookie

У меня есть скрипт curl, который действует как прокси-сервер между клиентом и основным сервером.

……

$field_array= array( 'Accept' => 'HTTP_ACCEPT', 'Accept-Charset' => 'HTTP_ACCEPT_CHARSET', 'Accept-Encoding' => 'HTTP_ACCEPT_ENCODING', 'Accept-Language' => 'HTTP_ACCEPT_LANGUAGE', 'Connection' => 'HTTP_CONNECTION', 'Host' => 'HTTP_HOST', 'Referer' => 'HTTP_REFERER', 'User-Agent' => 'HTTP_USER_AGENT' ); $curl_request_headers=array(); foreach ($field_array as $key => $value) { if(isset($_SERVER["$value"])) { $server_value=$_SERVER["$value"]; $curl_request_headers[]="$key: $server_value"; } }; $curl_request_headers[]="Expect: "; session_write_close(); //Open connection $curl_handle = curl_init(); curl_setopt($curl_handle,CURLOPT_COOKIE,session_name()."=".session_id().";"); //Set the url, POST data curl_setopt($curl_handle, CURLOPT_URL, $curl_url); curl_setopt($curl_handle, CURLOPT_POST, !empty($user_post_data)); curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $user_post_data); curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl_handle, CURLOPT_AUTOREFERER, TRUE); curl_setopt($curl_handle, CURLOPT_HEADER, 1); curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, false); curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $curl_request_headers); curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, false); $result = curl_exec($curl_handle); //Close connection curl_close($curl_handle); list($headers,$content)=explode("\r\n\r\n",$result,2); foreach (explode("\r\n",$headers) as $hdr) { if(preg_match("/Transfer-Encoding:.*chunked/i", $hdr)) { // Remove chunked headers. Not properly handled by browsers } else { header($hdr); }; } echo $content; 

Теперь, на главном сервере, я установил cookie в скрипт, а затем попытаюсь прочитать его значение в другом скрипте. Я не могу прочитать значение. Таким образом, есть некоторая проблема, передающая значение вокруг в curl. Как исправить?

благодаря

НАЙДЕННЫЙ РЕШЕНИЕ:

Собственно, глупая проблема. Мне нужно явно установить файлы cookie в CURLOPT_COOKIE. Следующий код теперь работает для меня:

 ...... $_COOKIE[session_name()]=session_id(); $cookie_string=""; foreach( $_COOKIE as $key => $value ) { $cookie_string .= "$key=$value;"; }; //Open connection $curl_handle = curl_init(); curl_setopt($curl_handle,CURLOPT_COOKIE, $cookie_string); ...... 

вы должны добавить пробел после точки с запятой, чтобы лучший способ:

 $cookie = array(); foreach( $_COOKIE as $key => $value ) { $cookie[] = "{$key}={$value}"; }; $cookie = implode('; ', $cookie); $curl_handle = curl_init(); curl_setopt($curl_handle, CURLOPT_COOKIE, $cookie); 

Рассмотрите http_build_cookie () вместо импликации строки cookie или, если у вас нет установленного pecl_http:

 http_build_query($cookies, null, ';') 

Довольно просто.