php模拟post方式访问网页,显示盗用页面无法访问

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php模拟post方式访问网页,显示盗用页面无法访问相关的知识,希望对你有一定的参考价值。

php模拟post提交表单访问某个网页,post内容很简单只有一个,但是显示出来却是“你所访问的页面盗用了网页,无法访问”,用同样的方式模拟post这个网站其他网页都可以,只有这个页面不行。

模拟post提交的时候,根据目标网页限制的不同,需要采用不同的方法。

比如:

某些网页需要登录,这时候需要将登录的sessio(cookie)数据要一起发送;

再比如:

某些网页会检查发送来的请求来源(Referer)、浏览器的类型(User-Agent) ,如果模拟post提交时没有与要求的对应,可能就会出错。追问

如果是网页检查Referer的话,在php代码里应该如何改动?

追答

看你使用的post方法,是用的curl还是其他的。


以常见的file_get_contents为例:


function file_get_contents_post($url, $post)
 
    $options = array(
        \'http\' => array(
            \'method\' => \'POST\',
            \'content\' => http_build_query($post),
            \'header\'=>"User-Agent: Mozilla/5.0\\n"
        ),
    );
    $result = file_get_contents($url, false, stream_context_create($options));
    return $result;

$data = file_get_contents_post("http://www.a.com/post/post.php", array(\'name\'=>\'caiknife\', \'email\'=>\'caiknife@gmail.com\'));
var_dump($data);
参考技术A 啥地址。。。

405 HTTP 错误 - PHP POST

【中文标题】405 HTTP 错误 - PHP POST【英文标题】:405 HTTP Error - PHP POST 【发布时间】:2011-04-10 07:35:38 【问题描述】:

我有一个在 windows server 2008 上运行的站点。

该网站是 HTML,并且有两种形式可以 POST 到 PHP 脚本(都用于发送电子邮件)。

但是当我单击页面上的提交按钮时会出现此错误

"405 - 不允许用于访问此页面的 HTTP 动词。 您正在查找的页面无法显示,因为尝试访问的方法(HTTP 动词)无效。”

在网上四处查看后,我尝试了一些解决方案,但似乎都没有奏效。

我尝试在 iis 管理器中添加一个允许 POST、GET 的 .html 扩展名(通过添加托管处理程序),但这似乎不起作用。

有什么想法吗?任何帮助将不胜感激!

编辑:

HTML 表单代码:

<form id="form1" name="form1" method="post" action="mail.php">
           <fieldset>
           <legend><strong>Please fill out our contact form</strong></legend>
            <table  border="0">
              <tr>
                <td >Name*</td>
                <td ><input class="purple" name="nickname" type="text" id="nickname" /></td>
              </tr>
              <tr>
                <td>EMail*</td>
                <td><input class="purple" name="email" type="text" id="email" /></td>
              </tr>
              <tr>
                <td>Phone No.</td>
                <td><input class="purple" name="tel" type="text" id="tel" /></td>
              </tr>
              <tr>
                <td>Company Name*</td>
                <td><input class="purple" name="comp" type="text" id="comp" /></td>
              </tr>
              <tr>
                <td>Query</td>
                <td><textarea class="purple" name="message" cols="53" rows="10" id="message"></textarea></td>
              </tr>
              <tr>
                <td colspan="2" align="center"><input name="Submit" type="submit" value="Submit"/>
              <label>
                  <input name="reset" type="reset" id="reset" value="Reset" />
                  <input type="hidden" name="ip" value=" echo $REMOTE_ADDR; " />
              </label></td>
                </tr>
                <tr>
                <td>*Required Fields</td>
                <td></td>
              </tr>
               <tr>
                <td colspan="2"><h3>Why not call us? 021 4868150</h3>
                 <p>&nbsp;</p></td>
              </tr>
            </table>
            </fieldset>
        </form>

PHP 脚本

<?php
      $nickname = $_REQUEST['nickname'] ;
      $email = $_REQUEST['email'] ;
      $tel = $_REQUEST['tel'] ;
      $comp = $_REQUEST['comp'] ;
      $message = $_REQUEST['message'] ;


    // Let's check if all fields are filled in!
    if(empty($nickname) || empty($email) || empty($comp))
    
    $error = "All of the required fields have not been completed, <a href=\"javascript:history.go(-1)\">please click here to go back.</a>";
    
    else
    
    $content= "$nickname has sent you an e-mail from ePubDirect
    Query:
    $message
    You can contact $nickname via Email: $email. <br />Other relevant details of individual: <br />Telephone Number: $tel <br />Company: $comp";

    mail( "xxxxxxx@gmail.com", " Query", $content, "From: $email"); //first thing has to be address it is going to, then what the subject of the mail should be, the content and a from address which will be the query submitter.
    echo  "<h2>$nickname</h2><br></br>
    Your query has been succesfully sent. <br></br><br></br>
    We will deal with this query and be in touch as soon as possible.<br></br><br></br><br></br> 
    The contact details you submitted are: <br></br><br></br>
    <strong>Email:</strong>&nbsp; $email<br></br><br></br>
    <strong>Phone:</strong>&nbsp; $tel<br></br><br></br>
    <strong>Company:</strong>&nbsp; $comp<br></br><br></br>
    <a //href=\"javascript:history.go(-1)\"> Click here to return to the contact page.</a></br>";
    ; 

    ?>

【问题讨论】:

你有 URL 重写吗?如果 sop 将它们附加到您的 OP 中。 我已经更新了我正在使用的代码。我已经在我自己的托管公司尝试过,并且效果很好,所以我相信这不是代码。我认为这与设置的 IIS 服务器有关,但我对此领域并不熟悉。 【参考方案1】:

IIS 是否配置为处理 POST 动词的 PHP 文件?听起来您需要为 PHP 文件而不是 HTML 文件添加 POST 动词。

【讨论】:

嗨,我已经在 IIS 中通过进入 Handler Mappings 并编辑 PHP 脚本映射来处理 POST 动词进行了尝试。但是,我仍然得到相同的响应。

以上是关于php模拟post方式访问网页,显示盗用页面无法访问的主要内容,如果未能解决你的问题,请参考以下文章

如何使用HttpClient模拟浏览器GET POST

WordPress头像无法显示怎么办

为啥网页不能正常跳转(在线等-------)

PHP写的页面无法访问,报HTTP500错误,这个是怎么回事

如何让网页php同时支持get和post访问

PHP防止图片盗用(盗链)的方法小结