Zend_Http_Client和cURL正在删除换行符

问题描述

|| 我正在尝试从远程服务器获取CSV文件并使用Zend_Http_Client下载 获取的版本已删除所有换行符。
require_once(\'Zend/Http/Client.PHP\');
$client = new Zend_Http_Client($url);
//also tried the curl adapter but no change

$client->setCookieJar();
$client->setAuth(\'user\',\'pass\',Zend_Http_Client :: AUTH_BASIC);

if(!empty($params)){
   $client->setParameterGet($params);
}


$client->request();
$request = $client->getLastRequest();


$response = $client->getLastResponse();
echo $response->getRawBody();
响应全是一行。 如果我卷曲取出
$url
,则它在单独的行上。 另外,我正在查看源代码,而不是HTML呈现的版本 更新 所以我用cURL重写了那一点,它仍然做同样的事情!
 if(!empty($params)){
      $queryString = http_build_query($params);
      $url.=\'?\'.$queryString;
 }

 $ch = curl_init($url);

 curl_setopt($ch,CURLOPT_USERPWD,\"$username:$password\");
 curl_exec($ch);
有任何想法吗     

解决方法

您能否尝试使用cURL适配器设置Zend_Http_Client:
$client->setAdapter(new Zend_Http_Client_Adapter_Curl());
另外,您确定您没有在浏览器中显示
$response->getRawBody()
,而是将其解释为HTML,因此将换行符解释为空格吗? 如果右键单击->显示源,是否有换行符?     ,为什么要使用getRawBody()而不是getBody()? rawBody()通常不是您想要的,并且可能以某种形式编码。 无论如何,您都可以发布从服务器获得的响应头吗?此外,指向实际文件或几行的链接也将有所帮助。
$response = $client->getLastResponse();
echo $response->getHeadersAsString();
    ,并不是真正的答案,但是一种解决方法是使用curl系统调用。 看来这是行尾的问题,即使我设置了ini值也没有被发现。
 $urlArray = parse_url($url);

//put the params together
 if(!empty($params)){
      //split up any existing params
      $qsArray = parse_str($urlArray[\'query\']);
      if(empty($qsArray)){
           $urlArray[\'query\']=http_build_query($params);
      }
      else{
           $urlArray[\'query\'] = http_build_query(array_merge($qsArray,$params));
      }
 }

 //set the username and password
 $urlArray[\'user\']=$username;
 $urlArray[\'pass\']=$password;


// http_build_url doesn\'t work so doing it by hand

 $urlString  = $urlArray[\'scheme\'];
 $urlString .= \"://\";
 $urlString .= $urlArray[\'user\'].\':\'.$urlArray[\'pass\'] .\'@\';
 $urlString .= $urlArray[\'host\'];
 $urlString .= $urlArray[\'path\'];
 $urlString .= \'?\'.$urlArray[\'query\'];

//     $urlString = http_build_url($urlArray);
//     echo($urlString);

//php is messing up the line endings,so using a system call
 return  `curl \'$urlString\'`;