0

私はphpグラバーをプログラミングしています。いくつかのテキストを取得し、取得したコンテンツを前回のスキャンでデータベースに保存されたコンテンツと比較したいと考えています。すべて正常に動作します。しかし、「フィルター」フォームであるURLをスキャンしたいので、データを投稿しているため、スキャンする正確なURLが表示されません。スクリプトが必要なデータを含むフォームを送信して、スクリプトに必要なコンテンツを表示し、その後コンテンツを取得できるようにする方法はありますか?

そのようなもの

$url = 'myurl'; 
$data=get_data($url);
$grabbed=strip_tags(get_match('some regex',$data);

function get_data($url){
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}
function get_match($regex,$content)
{
    preg_match($regex,$content,$matches);
    return $matches[1];
}

これはうまく機能しますが、コンテンツにアクセスできるようにするために、その URL にフォーム サブミソン スクリプトが必要です。それは可能ですか?

どうもありがとう、

マーティン。

アップデート :

    <?php
//url
$url = "http://data.skga.sk/Tournaments.aspx";

//get the page content
$content = get_data($url);
echo $content;
  


//gets the match content
function get_match($regex,$content)
{
    preg_match($regex,$content,$matches);
    return $matches[1];
}

//gets the data from a URL
function get_data($url)
{
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "ctl00%24RightContentPlaceholder%24dpTo=20.10.2012");
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}
?>

それが今の私のコードです。しかし、私はまだそれを解決する方法を知りません。ブラウザでhttp://data.skga.sk/Tournaments.aspx?ctl00%24RightContentPlaceholder%24dpTo=20.10.2012を実行すると問題ありません。しかし、このphpを実行すると、デフォルトのページが表示されます

4

2 に答える 2

0

curlを使用している場合はcurl_setopt($ch, CURLOPT_POST, 1)、POSTリクエストに切り替えて、curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields)リクエストに含める必要のある投稿データを運ぶために使用することをお勧めします。curl_setoptドキュメントのCurlオプションの詳細。

于 2012-09-20T10:12:06.503 に答える
0

次のように投稿リクエストを処理できます。

curl_setopt($curl_handler, CURLOPT_POST, true);
curl_setopt($curl_handler, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($curl_handler, CURLOPT_URL, $url);

... ここで、$url は元の URL で<form action="[url]" [...]、$postdata は「para1=val1¶2=val2&...」のような urlencoded 文字列です。

参照: http://php.net/manual/en/function.curl-setopt.php

例: 次のようなフォームを送信します。

<form action="http://example.com/login.php" method="post">
    <input type="text" name="name" />
    <input type="password" name="password" />
    <input type="submit" />
</form>

これはあなたがすることです:

<?php
$curl_handler = curl_init();

curl_setopt($curl_handler, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_handler, CURLOPT_POST, true);
curl_setopt($curl_handler, CURLOPT_POSTFIELDS, "name=admin&password=secret");
curl_setopt($curl_handler, CURLOPT_URL, "http://example.com/login.php");

$data = curl_exec($curl_handler);
curl_close($curl_handler);
?>
于 2012-09-20T10:11:14.720 に答える