2017-03-08 33 views
0

phpcurlを使用して私のホールドWebmailに自動的にログインし、すべてのメールを表示します。 これまでのログインは完璧です。 資格情報とCookieでログインしています。PHPcurl:ログイン後にウェブサイトにログインしてデータを取得するHTTP 404リソースが見つかりませんエラー

問題:

ダッシュボードは表示されますが、データは表示されません。

Horde Webmail Screenshot

私は何のエラー出力を得るのです。ここではスクリーンショットは、それがどのように見えるかですか?コンソールで

それは言う:ここ

Failed to load resource: the server responded with a status of 404 (Not Found) 

私のコンソールのスクリーンショット:私はこれまで使用してくださいどのようなコード

Screenshot Error Output

//Data 
$webmail_login = "http://webmail.licht-austria.at/login.php"; 
$webmail_mailbox = "http://webmail.licht-austria.at/imp/dynamic.php?page=mailbox"; 
$login = ""; 
$password = ''; 
$postdata = "login_post=1&horde_user=$login&horde_pass=$password&horde_select_view=auto&new_lang=de_DE"; 

//Curl Login POST 
$ch = curl_init(); 
$agent = $_SERVER["HTTP_USER_AGENT"]; 
curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
curl_setopt($ch, CURLOPT_URL, $webmail_login); 
curl_setopt($ch, CURLOPT_NOBODY, 1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); 
$result = curl_exec($ch); 
//Until here it works i logged in 

//Curl Mailbox GET 
curl_setopt($ch, CURLOPT_URL, $webmail_mailbox); 
curl_setopt($ch, CURLOPT_POST, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
$data = curl_exec($ch); 
echo $data; 

私のコードがどのように動作しますか?

最初の手順では、自分の認証情報を使用し、POSTを介してWebmailにログインします。 PostDataは正しくありません。私はログインできます。 webmail.at/login.phpが終了したら、私の受信トレイ(webmail.at/imp/dynamic.php?page=mailbox)にリダイレクトされます。 ウェブメールはGETメソッドを使用してすべてのメールと記事を取得します。この時点で私は404エラーを受け取ります。

+0

まず、HTTPを使用してログインする必要がありますか? IMAP/SMTPは良い方法ではありませんか? 2番目のことは、WebメールクライアントはAjaxでデータを送信でき、カールはそれを処理できません。 – jamek

+0

ああよく問題は、私はIMAPについて多くのことを理解しておらず、IMAPの使い方が分かりません。あなたは私にそれを行う方法の例を教えてもらえますか? –

+0

あなたは正しくユーザー名/パスワードをエンコードしません。 '&'またはスペース(名前が2の場合)を持つパスワードは、間違ってエンコードされ、ログインは拒否されます。 urlencode()をチェックアウトする必要があります – hanshenrik

答えて

0

Failed to load resource: the server responded with a status of 404 (Not Found)

このエラーは、カールとは関係なく、ウェブページのリソースをウェブページに読み込むことに関連しています。あなたがでそれを回避することがあり、これを解決するために

echo '<base href="http://www.example.com" />' . $data;

しかし、これを行うにはお勧めしません。

応答がHTMLであれば、それはあなたがあなたの応答データを再操作することを良くなる、例えば

、それは例えばDomライブラリを使用して、または単に正規表現を使用して解析し、そのJSONレスポンスであれば新しいシンプルUIを再構築して結果を表示する。

+0

私はあなたのエコーでこれを行うと、私はこのエラーが発生します:XMLHttpRequestはhttp://webmail.licht-austria.at/services/ ajax.php/imp/dynamicInit。プリフライト要求への応答がアクセス制御チェックを通過しない:要求されたリソースに「アクセス制御許可」がない。したがって、Origin 'http://service-lukas-reiner.de'はアクセスが許可されていません。 –

+0

それからカールの応答を '手動で'再解析する方が良いでしょう。 – hassan

+0

それを試してみてください。しかし、もし私が私のPHPファイルでOriginを許可しても動作するのでしょうか? GETメソッドのOriginヘッダーを設定できますか? –

0

相対パスを使用してリソースをロードしています。 http://www.example.com/jquery.min.jsのような絶対パスが必要です。あなたができることは、必要なすべてのリソースをWebサイトからダウンロードし、srcフォルダに配置することです。ウェブサイトは例えば/script.jsで使用されていますが、相対パスなのでプロジェクトで検索します。

関連する問題