Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP Curl和setcookie问题_Php_Cookies_Curl_Setcookie - Fatal编程技术网

PHP Curl和setcookie问题

PHP Curl和setcookie问题,php,cookies,curl,setcookie,Php,Cookies,Curl,Setcookie,我有一个curl脚本,它充当客户机和主服务器之间的代理 $field_array= array( 'Accept' => 'HTTP_ACCEPT', 'Accept-Charset' => 'HTTP_ACCEPT_CHARSET', 'Accept-Encoding' => 'HTTP_ACCEPT_ENCODING', 'Accept-Language' => 'HTTP_ACCEPT_LANGUAGE',

我有一个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中显式设置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);
考虑不要内爆cookies字符串,或者,如果没有安装pecl_http,只需:

http_build_query($cookies, null, ';')

非常简单。

我认为您应该使用COOKIEJAR和COOKIEFILE函数。回答您自己的问题作为答案,而不是在question@Jon:谢谢。。。它不允许我在接下来的8小时内回答…现在你可以发布你的答案并接受+1-我必须
rawurlencode()
这个值,因为我的一些值有分号<代码>$cookie[]=$key.“=”。rawurlencode($value)考虑使用
http\u build\u query($cookies,null,“;”)
而不是foreach。