0

URLのhtmlを取得したい。基本的に私はこれをやっています:

$client = new Zend_Http_Client($url);           
$client->setConfig(array('strictredirects' => true, 'timeout'=> 100, 'storeresponse' => true));
$response = $client->request();
$html = $response->getBody();

リダイレクトする一部の URL で、次のエラーが発生します

指定された URI が無効です

たとえば、次の URL を考えてみます。

http://www.hiexpress.com/redirect?path=hd&brandCode=ex&hotelCode=housl®ionCode=1&localeCode=en&cm_mmc=mdpr- -GoogleMaps- -ex-_-housl

別の URL にリダイレクトします。lastResponse を取得しようとすると、何も返されません。この URL の html を取得するにはどうすればよいですか?? 構成オプション strictredirects を試しましたが、それでも同じエラーが発生します。どうすればこれを解決できますか??

4

2 に答える 2

0

これをコントローラーに入れてみてください

  // @$uri your url
  $client = new Zend_Http_Client($uri, array(
    'maxredirects' => 2,
    'timeout'      => 10,
  ));

  // Try to mimic the requesting user's UA
  $client->setHeaders(array(
    'User-Agent' => $_SERVER['HTTP_USER_AGENT'],
    'X-Powered-By' => 'Zend Framework'
  ));

  $response = $client->request();

  $body = $response->getBody();
  $body = trim($body);
// Get DOM
if( class_exists('DOMDocument') ) {
  $dom = new Zend_Dom_Query($body);
} else {
  $dom = null; // Maybe add b/c later
}

$title = null;
if( $dom ) {
  $titleList = $dom->query('title');
  if( count($titleList) > 0 ) {
    $title = trim($titleList->current()->textContent);
    $title = substr($title, 0, 255);
  }
}
$this->view->title = $title;//Title of the page
$description = null;
if( $dom ) {
  $descriptionList = $dom->queryXpath("//meta[@name='description']");
  // Why are they using caps? -_-
  if( count($descriptionList) == 0 ) {
    $descriptionList = $dom->queryXpath("//meta[@name='Description']");
  }
  if( count($descriptionList) > 0 ) {
    $description = trim($descriptionList->current()->getAttribute('content'));
    $description = substr($description, 0, 255);
  }
}
$this->view->description = $description;// Description of the page
于 2013-09-11T09:21:20.823 に答える
0

何らかの理由で Zend Http Client が機能せず、CURL を使用して作業を完了させる必要がありました。HTML を取得するには:

$headers = array( "User-Agent:MyAgent/1.0\r\n");
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION,  TRUE);
curl_setopt($curl, CURLOPT_MAXREDIRS, 50);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curl, CURLOPT_TIMEOUT, 20);
$html = curl_exec($curl);
curl_close($curl);
echo $html;

有効な URL / リダイレクトされた URL を取得するには:

$headers = array( "User-Agent:MyAgent/1.0\r\n");
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION,  TRUE);
curl_setopt($curl, CURLOPT_MAXREDIRS, 50);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curl, CURLOPT_TIMEOUT, 20);
$content = curl_exec($curl);
$redirectedUrl = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL);
curl_close($curl);
echo $redirectedUrl;
于 2013-09-11T13:32:34.593 に答える