如何通过POST请求通过curl从外部网页获取数据

时间:2018-10-09 02:21:59

标签: php ajax web-services http-headers php-curl

我以前已经编写了一个代码,该代码使我可以查询由GET发送ID的外部网页,并向我显示一个人的姓名和姓氏。该代码非常有效,是这样:

      function nome($id)

        {

        $url = 'https://www.dateas.com/es/consulta_cuit_cuil?name=&cuit='.$id;



        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HTTPHEADER,array("Accept-Lenguage: es-es,es"));
        curl_setopt($ch, CURLOPT_TIMEOUT,10);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        $html = curl_exec($ch);
        $error = curl_error($ch);
        curl_close($ch);

         preg_match_all('/<tr class="odd"><td><a href="(.*?)">/',$html ,$matches);

         if (count($matches[1]) == 0) 
         {
            $result = "Error in the server";
         }
         else if(count($matches[1]) == 1)
         {
            $result = $matches[1][0];
            $result = str_replace('/es/persona/','', $result);
            $result = substr($result, 0,-12);
            $result = str_replace('-', ' ', $result);
            $result = ucwords($result);
         }
        return $result; 
            }

    $Name = nome($_GET['id']);
    echo "<br><br>The name of the person is : ". $Name;

此代码运行良好,但现在我需要从另一个网站提取此信息,但要这样做,我必须先登录该网页,然后转到查询部分并输入ID,单击搜索按钮,然后然后页面返回该人的信息。该网站不是通过GET而是通过POST来请求搜索和显示人员信息。

我的问题是我不知道如何在此新页面中提取信息,因为我必须先登录然后寻找输入其ID的人,但是请求由POST处理。

如何通过CURL或任何其他PHP方法获取进行查询的人员的信息?

这是用于登录进行查询的网站的登录表单页面:http://buscardatos.com/Socios/ingresso.php

登录后,我们应该转到:http://www.buscardatos.com/Personas/DNI

有一个文本字段,在其中输入ID,然后通过单击搜索按钮显示此人的信息。

网站通过POST发出请求。我尝试使用与此处显示的代码相同的代码,但它抛出“找不到页面”错误。

能否请您提供一些代码或有关如何解决此问题的信息?

1 个答案:

答案 0 :(得分:0)

也许您可以尝试使用捕获工具(例如Fiddler。)来捕获本地端口与服务器之间的交互。实际上,浏览器本身可以看到此信息。

首先,您需要使用浏览器来完成登录和查询过程,然后可以清楚地看到浏览器与服务器交互的http / https数据信息。

接下来,您需要使用PHP代码来模拟浏览器以提交登录信息(例如服务器),然后获取服务器返回的数据(该数据可能是会话值,通常存储在浏览器的cookie中。 )

接下来,您可以使用上面的CURL来获取数据。请记住携带服务器验证所需的数据。如果它是cookie,也许您可​​以这样添加它:

curl_setopt($ch,CURLOPT_COOKIE,'cookie= XXXX ; cookie_type= YYYY;');

只要提供正确的数据和URL,就可以获取所需的数据。