【问题标题】:How to obtain data from an external web page with curl through POST requestscurl如何通过POST请求从外部网页获取数据
【发布时间】:2018-10-09 02:21:59
【问题描述】:

我之前制作了一个代码,允许我查询我通过 GET 发送的外部网页,它显示了一个人的姓名和姓氏。该代码运行良好,是这样的:

      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 方法获取查询人的信息?

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

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

有一个输入id的文本字段,单击搜索按钮会显示此人的信息。

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

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

【问题讨论】:

  • 我建议您自己尝试一下,在发送登录请求时使用工具捕获数据,以便您可以尝试通过 PHP Curl 复制它。

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


【解决方案1】:

也许你可以尝试用抓包工具(比如Fiddler,其实浏览器本身可以看到这个信息)来抓包你本地端口和服务器的交互。

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

接下来需要用PHP代码模拟浏览器像服务器一样提交登录信息,然后获取服务器返回的数据(这个数据可能是一个session值,一般本地保存在浏览器的cookie中。 )

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

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

只要你提供正确的数据和网址,就可以得到你想要的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    相关资源
    最近更新 更多