0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

rss-phpの認証方式を拡張する

Posted at

BASIC認証など以外、たとえばNTLMがかかっているときにcurlを実行する方法。

rss-php

PHPでRSSを取得できるパッケージです。

dg/rss-php: Small and easy-to-use library for consuming RSS and Atom feeds

実装

ひとつのファイルにまとめられていますし、長くも無いので読めると思います。

rss-php/Feed.php at b33661748d89d8c0c288e8d86feada6018d05031 · dg/rss-php

PHPのcurl関数を使用しています。

cURL関数の認証

Linuxのcurlと同等だとすると、デフォルトではuserとpassを入力してもBASIC認証しか対応できない。

curl コマンド | コマンドの使い方(Linux) | hydroculのメモ

オプションの設定

PHP: curl_setopt - Manual

CURLOPT_HTTPAUTH 使用する HTTP 認証方法。
以下の中から選びます。
CURLAUTH_BASIC
CURLAUTH_DIGEST
CURLAUTH_GSSNEGOTIATE
CURLAUTH_NTLM
CURLAUTH_ANY および CURLAUTH_ANYSAFE

2 つ以上の方法を組み合わせるには、ビット演算子 |(or) を使用します。このような場合、cURL はサーバーがサポートしている方法を 問い合わせたうえで最適な方法を選択します。

CURLAUTH_ANY は CURLAUTH_BASIC | CURLAUTH_DIGEST |
CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM のエイリアスです。

CURLAUTH_ANYSAFE は CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM のエイリアスです。

コードを書き換える

(composerで入れて)
vendor/dg/rss-php/src/Feed.php

curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);

を追加してやる。
と、メソッドはこうなる。


        /**
         * Process HTTP request.
         * @param  string
         * @param  string
         * @param  string
         * @return string|FALSE
         * @throws FeedException
         */
        private static function httpRequest($url, $user, $pass)
        {
                if (extension_loaded('curl')) {
                        $curl = curl_init();
                        curl_setopt($curl, CURLOPT_URL, $url);
                        if ($user !== NULL || $pass !== NULL) {
                                curl_setopt($curl, CURLOPT_USERPWD, "$user:$pass");
                        }
                        // ↓追加
                        curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
                        curl_setopt($curl, CURLOPT_HEADER, FALSE);
                        curl_setopt($curl, CURLOPT_TIMEOUT, 20);
                        curl_setopt($curl, CURLOPT_ENCODING , '');
                        curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); // no echo, just return result
                        if (!ini_get('open_basedir')) {
                                curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE); // sometime is useful :)
                        }
                        $result = curl_exec($curl);
                        return curl_errno($curl) === 0 && curl_getinfo($curl, CURLINFO_HTTP_CODE) === 200
                                ? $result
                                : FALSE;

                } elseif ($user === NULL && $pass === NULL) {
                        return file_get_contents($url);

                } else {
                        throw new FeedException('PHP extension CURL is not loaded.');
                }
        }



0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?