simple_http_dom - 如何向每个url发送请求

时间:2014-04-05 20:45:30

标签: php simple-html-dom

我的get-listing.php输出中有16个链接,我需要将请求发送到每个URL以获取响应,我需要在将请求发送到每个URL时接收元素列表。 / p>

$base1 = "http://testbox.elementfx.com/get-listing.php";
$html = file_get_html($base1);

$links = $html->find('p[id=links] a');

foreach ($links as $element) 
{
  //open each url in each array
  $urls[] = $url = $element->href;
  $data = file_get_html($url);
}

当我使用上面的代码时,它只会将请求发送到每个url以获得响应,我有9个响应。我应该有9个以上的回复。

您能否告诉我如何使用simple_http_dom向每个网址发送请求以获取回复?

1 个答案:

答案 0 :(得分:0)

如果您的问题是向您已经解析过的每个网址发送简单请求并获得回复,请尝试file_get_contents

foreach ($links as $element)
{
  // This array stack is only necessary if you plan on using it later
  $urls[] = $url = $element->href;

  // $opts and $context are optional for specifying options like method
  $opts = array(
    'http'=>array(
      'method'=>"GET", // "GET" or "POST"
    )
  );
  $context = stream_context_create($opts);

  // Remove context argument if not using options array
  $data = file_get_contents($url, false, $context);

  // ... Do something with $data
}

您的其他选项更复杂,但具有更大的灵活性(取决于应用程序)Curl

foreach ($links as $element)
{
  $urls[] = $url = $element->href;

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  // Used for GET request
  curl_setopt($ch, CURLOPT_POSTFIELDS, null);
  curl_setopt($ch, CURLOPT_POST, FALSE);
  curl_setopt($ch, CURLOPT_HTTPGET, TRUE);
  // Necessary to return data
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

  $data = curl_exec($ch);
  curl_close($ch);

  // ... Do something with $data
}

这简直就是Curl的表面,PHP网站上的文档(上面链接)提供了更多信息。

如果从网址返回的数据是HTML,您可以通过PHP的DomDocument传递它,以便在提取后解析。 PHP网站上提供了文档和示例(我现在无法发布更多链接,抱歉)。