Php Zend_Http_客户端和cURL正在删除换行符

Php Zend_Http_客户端和cURL正在删除换行符,php,zend-framework,curl,httpwebrequest,zend-http-client,Php,Zend Framework,Curl,Httpwebrequest,Zend Http Client,我正在尝试从远程服务器获取CSV文件,并使用Zend_Http_客户端下载它 获取的版本已删除所有换行符 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_Cl

我正在尝试从远程服务器获取CSV文件,并使用Zend_Http_客户端下载它

获取的版本已删除所有换行符

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();
答案都是一行

如果我使用curl获取
$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->setAdapter(new Zend_Http_Client_Adapter_Curl());
另外,您确定没有在浏览器中显示
$response->getRawBody()
,它将其解释为HTML,因此将换行符解释为空格?
如果右键单击->显示源代码,是否有换行符?

这不是一个真正的答案,但解决方法是使用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'`;

为什么使用getRawBody()而不是getBody()?rawBody()通常不是您想要的,可能以某种形式进行编码

在任何情况下,您都可以发布从服务器获得的响应头吗?另外,一个指向实际文件的链接或其中的几行也会有所帮助

$response = $client->getLastResponse();
echo $response->getHeadersAsString();

谢谢,但我尝试了
Zend\u Http\u Client\u Adapter\u Curl
,但没有成功。此外,我正在查看源代码,而不是html呈现版本。看起来服务器发送时没有换行符!如果您可以共享来自Zend_Http_客户端调用的响应头和来自命令行curl(运行curl-I)的响应头,这可能会给出发生这种情况的原因的线索。我在开始时使用了
getBody()
,这就是问题的根源。此外,我无法发布文件(敏感信息)。另外,如果查询字符串有错误,我会返回html而不是csv。html确实有行尾。你能至少发布响应标题吗?即使从尸体上删除几行敏感材料也会有所帮助。一般来说,Z_H_C从身体上剥离任何数据的可能性很小。很抱歉问了一些愚蠢的问题,但是你用什么来查看源代码呢?可能是某些Windows程序使“\n”行结尾显示在一行中,因为它们不是“\r\n”?你能在一些十六进制查看器中检查CSV文件以确保行之间没有任何内容吗?