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 с curl, той е на отделни редове.

Освен това гледам източника, а не изобразената 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);

Някакви идеи


person Yisrael Dov    schedule 23.05.2011    source източник
comment
Тогава изглежда, че сървърът го изпраща без новия ред!   -  person BenMorel    schedule 23.05.2011


Отговори (3)


Можете ли да опитате да настроите Zend_Http_Client с cURL адаптера:

$client->setAdapter(new Zend_Http_Client_Adapter_Curl());

Също така, сигурни ли сте, че не показвате $response->getRawBody() във вашия браузър, който го интерпретира като HTML, следователно интерпретира новите редове като интервали? Ако щракнете с десния бутон -> покажи източника, имате ли новите редове?

person BenMorel    schedule 23.05.2011
comment
Благодаря, но опитах Zend_Http_Client_Adapter_Curl, не се получи. - person Yisrael Dov; 23.05.2011
comment
Също така гледам източника, а не изобразената html версия. - person Yisrael Dov; 23.05.2011

Защо използвате getRawBody(), а не getBody()? rawBody() обикновено не е това, което искате, и може да бъде кодирано в някаква форма.

Във всеки случай можете ли да публикувате заглавките на отговорите, които получавате от сървъра? Също така би помогнала връзка към действителния файл или няколко реда от него.

$response = $client->getLastResponse();
echo $response->getHeadersAsString();
person shevron    schedule 24.05.2011
comment
Използвах getBody() в началото, оттам започна проблемът. - person Yisrael Dov; 24.05.2011
comment
Също така не мога да публикувам файла (чувствителна информация). Освен това, ако има грешка в низа на заявката, получавам обратно html, а не csv. HTML има окончанията на редовете. - person Yisrael Dov; 24.05.2011
comment
Можете ли поне да публикувате заглавките на отговорите? Дори няколко реда от тялото, с изтрит чувствителен материал, биха помогнали. Като цяло е много малко вероятно Z_H_C да премахне каквито и да било данни от тялото. Извинете, че задавам глупави въпроси, но какво използвате, за да видите източника? Възможно ли е някаква Windows програма да прави \n краищата на редове да се появяват в един ред, защото не са \r\n? Можете ли да проверите CSV файла в някакъв шестнадесетичен преглед, за да уверите, че няма нищо между редовете? - person shevron; 16.06.2011

Всъщност не е отговор, но заобикаляне е да се използва системното повикване 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'`;
person Yisrael Dov    schedule 23.05.2011
comment
Ако можете да споделите заглавките на отговора от повикването на Zend_Http_Client и заглавките на отговора от curl на командния ред (изпълнете curl -I ‹url›), това може да даде представа защо се случва това. - person shevron; 24.05.2011