2012-03-04 5 views
1

cURLを使用してログインページを過ぎてウェブサイトから収入を得ようとしています。私はこれがちょっとした方法だと知っていますが、私は選択がありません。PHP cURLによるウェブサイトからの収入

<?php 
$username = "example"; 
$password = "example"; 
$postfields = "email=$username&password=$password"; 
// Use Curl to return the raw source of a webpage to a variable called 
$ch = curl_init(); 
//curl_setopt($ch, CURLOPT_HEADER, 1); // Get the header 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // Allow redirection 
curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookie"); 
curl_setopt($ch, CURLOPT_URL, "https://www.domain.com/login"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "$postfields"); 

$page = curl_exec($ch); 
curl_close($ch); // Closing 

if (preg_match("/<th>(.*)<\/th/s", $page, $matches)) { 
    echo $matches[1]; 
} 
?> 

それだけで、基本的に私は過去のログイン罰金を取得することができていますし、それが何かをつかむしないするpreg_matchを使用しようとすると、それは、しかし、私は収入をつかむしようとしています特定のWebサイトのダッシュボードに私をリダイレクトしますダッシュボードのすべてのHTMLを出力します。私は大歓迎

<th>$99.99</th> 

ヘルプ以内に "$ 99.99" 取得しようとしています

答えて

1

あなたのコードに次の行を追加します。

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

...そうカールちょうどそのセッションの結果を出力します。私はあなたの正規表現を非貪欲にすることをお勧めします:これは現在のところ<th>の1つですが、このコード部分は他のプログラムにコピーペーストされている可能性があります。 )

+0

それはそうした。ありがとうございました! – Ziygo

1

あなたの正規表現は貪欲で、複数の場合には<th>の内容を取得する可能性があります。正規表現でHTMLやXMLを解析しようとするのは、通常はお勧めできません。 HTMLパーサーはこの作業をより効果的に実行します。私はDOMDocumentの一部です。

問題を解決するには、[^<]+は、次の文字を含むすべての文字を集めますが、<は含まれません。

if (preg_match("/<th>([^<]+)<\/th/s", $page, $matches)) { 
    echo $matches[1]; 
} 

使用preg_match_all()上記の最初のものだけを取得するよう、あなたは、取得するための複数の<th>を持っている場合。

+0

幸いなことに、リダイレクト先のページにはの1つしかありません。しかし、あなたのコードを試した後も、価格だけでなくページ全体のHTMLコードを印刷しているようです。リダイレクトはこれに影響しますか? – Ziygo

+0

@Ziygo「」を含むHTMLを投稿します。正しいマークアップを取得しても正しく解析されない場合は、リダイレクトには責任がありません。 –

+0

返信のみ

​​
$ 11.13
ヘッダー/フッターと共に返されます。私が使用しているPHPコードはページ全体を返しています。 – Ziygo

関連する問題