如何使用php curl将数据发布到ASP站点

时间:2014-09-02 11:44:58

标签: php asp.net curl

我需要使用我网站上的php curl将数据发布到ASP网站。

ASP网站为http://www.hotfrog.com.au/AddYourBusinessSingle.aspx

对于这一点,我接近如下

  1. 使用PHP curl从该网站抓取网页html源代码以维护Cookie&会话

  2. 从该源提取的asp​​隐藏变量值

  3. 准备好的帖子字符串,包含所需的表单字段

  4. 并使用PHP curl将数据发布到目标ASP网站网址,但响应是没有条目详细信息的页面表单信息,甚至没有显示非输入字段的curl响应的验证消息。

  5. 对于此流程,为CURLOPT_USERAGENT,CURLOPT_COOKIEJAR,CURLOPT_COOKIEFILE

  6. 维护相同的值

    ASP网站需要下面的表单字段

    ctl00 $ $ contentSection $ CompanyDetailsControl txtBusinessName

    ctl00 $ $ contentSection $ CompanyDetailsControl txtSuburb

    它们是直接发布还是这些字段名称需要编码才能通过PHP curl发布到目标站点

    任何人都可以通过php curl获得此解决方案或ASP网站的任何其他方法的解决方案吗?

1 个答案:

答案 0 :(得分:1)

使用

function get_headers_from_curl_response($headerContent) {

    $headers = [];

    // Split the string on every "double" new line.
    $arrRequests = explode("\r\n\r\n", $headerContent);

    // Loop of response headers. The "count() -1" is to
    //avoid an empty row for the extra line break before the body of the esponse.
    for ($index = 0; $index < count($arrRequests) - 1; $index++) {

        foreach (explode("\r\n", $arrRequests[$index]) as $i => $line) {
            if ($i === 0) {
                $headers[$index]['http_code'] = $line;
            }
            else {
                list ($key, $value) = explode(': ', $line);
                $headers[$index][$key] = $value;
            }
        }
    }

    return $headers;
}

function regexExtract($text, $regex, $regs, $nthValue) {
    if (preg_match($regex, $text, $regs)) {
        $result = $regs[$nthValue];
    }
    else {
        $result = "";
    }

    return $result;
}

$regexViewstate = '/__VIEWSTATE\" value=\"(.*)\"/i';
$regexEventVal   = '/__EVENTVALIDATION\" value=\"(.*)\"/i';

$ch = curl_init("__YOUR__URL__HERE__");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');

$response = curl_exec($ch);
curl_close($ch);

$viewstate = regexExtract($response, $regexViewstate, $regs, 1);
$eventval  = regexExtract($response, $regexEventVal, $regs, 1);

$params = [
    '__EVENTTARGET'       => '',
    '__EVENTARGUMENT'     => '',
    '__VIEWSTATE'         => $viewstate,
    '__EVENTVALIDATION'   => $eventval,
    'ctl00%24txtUsername' => 'xxx',
    'ctl00%24txtPassword' => 'xxx',
    'ctl00$ImgLogin.x'    => '0',
    'ctl00$ImgLogin.y'    => '0',];

$ch2 = curl_init("http://gsc.klub-modul.dk/cms/ShowContentPage.aspx?ContentPageID=1");
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch2, CURLOPT_HEADER, 1);
curl_setopt($ch2, CURLOPT_POST, true);
curl_setopt($ch2, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch2, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($ch2, CURLOPT_COOKIE, 'cookies.txt');
curl_setopt($ch2, CURLOPT_COOKIEJAR, 'cookies2.txt');

$response2 = curl_exec($ch2);
curl_close($ch2);

foreach (get_headers_from_curl_response($response2) as $value) {
    foreach ($value as $key => $value2) {
        echo $key.": ".$value2."<br />";
    }
}