对ASP页面的卷曲请求

时间:2015-02-25 16:43:14

标签: php asp.net forms post curl

我正在处理的网页将此页面(http://www.homeinsight.com/Widget/default.asp?RP6TQO4W8S84)加载到iframe中。页面上的表单中有一个按钮,显示“下一步”。当用户单击“下一步”时,表单会提交。它根据表单上的action属性调用自身。返回的页面是第二步。

我更改了iframe,以便加载一个php文件,该文件使用cURL请求与上面相同的页面。我还调整了表单的Action属性,以便它调用一个php文件,该文件对页面执行cURL请求(http://www.homeinsight.com/Widget/default.asp?RP6TQO4W8S84)。我的问题是,当我通过cURL请求提交表单时,我无法显示第2步。如何获得提交输入的cURL请求以便显示第2步?

使用HttpFox和Tamper Data,我发现唯一的Post变量是     [firstName] =>你的名字     [lastName] =>你的姓氏     [emailAddress] => someemail@adomain.biz     [phone] => 9433238999     [Iam] =>销售 - 首页     [next_x] =>三十     [next_y] => 19     [PostBack] => 1     [QueryString] => RP6TQO4W8S84     [GCID] =>直接

这是我用来发送ASP页面请求的PHP代码,其中包含来自Step 1表单的已发布输入。

<?php

function getUrlContent($url, $postedVarsMinus1 = NULL)
{
    //open connection - initialize cURL handler
    $ch = curl_init();

    //set fieds to be posted
    //postedVarsMinus1 is an array of all the post variables that were
    //passed into the php code minus one post variable I added
    if(!is_null($postedVarsMinus1))
    {
        $fields = $postedVarsMinus1;
    }
    else
    {
        $fields = "";
    }

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true); //true

    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    //execute post
    $result = curl_exec($ch);

    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    $contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
    curl_close($ch);

    return ($httpcode>=200 && $httpcode<300) ? array($result, $contentType) : false;
}
?>

2 个答案:

答案 0 :(得分:1)

不知道后端代码对值的期望是什么(它是否需要表单名称和下一个按钮的名称)?我把一个快速的例子放在一起,但它不是100%工作,因为我猜测ASP后面的代码检查了一些其他细节。因此,我将概述您需要做什么:

1)通过cURL(你已经完成)

拉出表格

2)将表单属性修改为 服务器上的文件(我选择使用jQuery)

<script>
    $(function() {
        $('form').attr('action', 'myaction.php');
    });
</script>

3)创建表单操作文件(myaction.php):

$first = $_POST['firstName'];
$last = $_POST['lastName'];
$email = $_POST['emailAddress'];
$phone = $_POST['phone'];
$iam = $_POST['Iam'];
$pb = $_POST['PostBack'];
$qs = $_POST['QueryString'];
$gcid = $_POST['GCID'];

$data = array('firstName' => $first, 'lastName' => $last, 'emailAddress' => $email, 'phone' => $phone, 'Iam' => $iam, 'PostBack' => $pb, 'QueryString' => $qs, 'GCID' => $gcid);

getUrlContent('http://www.homeinsight.com/Widget/default.asp?RP6TQO4W8S84', $data);

答案 1 :(得分:0)

感谢所有发表意见的人。 Matt Altepeter的帖子肯定了我所做的事应该有效。但是,我错过了cURL或网站认为必要的步骤。

我使用了一个网站,我可以在其中构建我自己的完成参数的帖子。该网站返回了正确的页面信息。它还给了我一个字符串形式的帖子字段,这让我觉得卷曲或我提交的网站不喜欢我的变量数组。随后我对我的数组中的所有值进行了urlencoded,并将我的数组转换为key1 = value1&amp; key2 = value2&amp;的形式的字符串。然后我把那个字符串作为我的post字段变量。作品!