【问题标题】:How to submit a form of a html page using php如何使用php提交html页面的表单
【发布时间】:2012-05-05 09:39:42
【问题描述】:

我需要知道是否可以使用 php 加载 html 页面并在此页面内提交表单。就像这样:

<?php
   $html = fopen("http://www.mysite.com","r");
   //get position of form...
   ...
   //submit it 
?>

有可能吗?有人能帮我吗?谢谢!!!

编辑:

我必须提交这个表格

https://annunci.ebay.it/pubblica-annuncio

我的问题是,在这个页面中有一个图片上传,我不知道如何使用 php(抓取它)来做到这一点

【问题讨论】:

  • 查看cURL
  • 你能再解释一下吗?
  • 赞成。我一直很好奇这样的事情是否可以做到。但据我所知,这是不可能的。在外部页面中提交(或单击)按钮是没有意义的。除非您的 php 中有类似浏览器模拟器之类的东西来完成客户端工作。
  • 这是可能的,因为您正在获取所需文件的内容并稍后对其进行操作。您正在处理 T_STRING。但强烈建议不要在服务器根目录之外使用 PHP (require/file_get_contents),因为它为远程文件包含打开了大门
  • @metal_fan,要求或执行来自未知来源的代码是远程文件包含的常用门。从另一个网页提交不是因为您没有从它们执行任何代码。

标签: php forms web-scraping


【解决方案1】:

您还可以使用curl POST 到任何 URL,例如表单的操作 url。

$ch = curl_init('http://example.com/form_action.php');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('your' => 'data', 'goes' => 'here');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);

这将调用 URL http://example.com/form_action.php,就好像它是从一个将“你的”设置为值“数据”并且“去”设置为值“这里”的表单调用的。

要找出您需要发布的 URL,您可以检查源代码。执行此操作时,请检查您要发送的 &lt;input&gt; 标签上的“名称”属性。

编辑:如果 POST url 和字段可以更改,您应该检查@Adan's answer

【讨论】:

  • 如果您需要提交图片,使用 eBay 可能会有些棘手,最好查看我的其他答案,因为我相信它更适合您的实际需求。如果您真的认为需要这样做,请查看此答案以查看how to post an image using cURL
  • 我的问题是图片的上传是使用jquery完成的,所以当用户点击“上传图片”时,它不会重新加载页面并加载图片。我怎么能在php中做到这一点?有什么想法吗?
  • 你的意思是在用户提交你的表单之前通过jQuery将图片上传到服务器,当用户要提交你的表单时,你希望它发送到eBay对吗?在 jQuery 上传之后,您应该设置一个隐藏的表单属性,它会为您提供图像的 ID,以便能够在下一页加载时找到它。
  • 所以你说我可以设置文件输入的值,查询会将其上传到服务器,而不是将隐藏值保存到下一页?
  • 如果您需要一种简单的方法来观察 jquery 在后台执行的请求,请使用 the chrome network panelfirebug network panel
【解决方案2】:

基本上这是你需要做的

1- 使用file_get_contents()获取HTML页面的内容(注意安全风险)
2- 使用 DOMDocument
解析 HTML 3-获取表单的属性,最重要的是(ACTIONMETHOD)使用DOMDocument
4- 使用DOMDocument 获取表单的字段名称
5-然后使用METHOD方法向ACTION url发送一个请求,其中包含您想要使用cURL替换字段的数据

【讨论】:

    【解决方案3】:

    您可以使用 curl 在 php 中获取页面。正如@Lumbendil 的回答中提到的那样。为了解析 HTML,您可以使用类似的库

    http://simplehtmldom.sourceforge.net/

    或者你可以使用

    http://code.google.com/p/phpquery/

    【讨论】:

      【解决方案4】:

      作为另一个更干净的选项,您可以使用eBay API。它提供了添加新项目的方法,并且可能已经为 php 构建了库,例如PHP Accelerator toolkit for eBay

      【讨论】:

      • 我不必只为 ebay 做这件事.. 而是为 subito.it、kijii 等其他网站..
      • 不过,在提交表单之前,我会尝试先研究他们是否有 API,因为这些参数可能会不时更改且无需事先通知。此外,如果您在任何时候需要身份验证,您就会被搞砸(这是可能的,但很乏味)。
      【解决方案5】:

      我提供了一个从网络获取的代码来获取页面的内容。之后你可以使用 jquery(maybe) 来强制提交功能。

      $url = "URL OF YOUR PAGE"; // I have tested page from same server
      $lines = file( $url );
      foreach( $lines as $line_num => $line ) {
          $line = htmlspecialchars( $line );
          $line = str_replace( "&lt;", '<span>&lt;', $line );
          $line = str_replace( "&gt;", '&gt;</span>', $line );
          $line = str_replace( "&lt;!–", '<em>&lt;!–', $line );
          $line = str_replace( "–&gt;", '–&gt;</em>', $line );
          echo "<span class=\"linenumber\">Line <strong>$line_num </strong></span> : " . $line . "<br/>\n";
      }
      

      上面的代码给了我来自同一服务器上另一个页面的内容。现在您必须找到一种方法来检查表单是否存在,然后;强制提交该表单。

      【讨论】:

        猜你喜欢
        • 2012-01-10
        • 2013-02-14
        • 2013-02-19
        • 2014-08-02
        • 1970-01-01
        • 1970-01-01
        • 2016-12-01
        • 2019-06-15
        • 1970-01-01
        相关资源
        最近更新 更多