2

ブラウザで使用できる Web サービスがありますが、PHP スクリプトで CURL を使用して呼び出すことはできません。

ここで、送信されたログイン/パスワードの例で使用するコードを示します。

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($ch, CURLOPT_USERPWD,'BmN+GP4VBev5tVzJU/altsyXXw0PXYcunbT8F8EatlbpctBXZp1OO2ySQyekZb5729qQPkdwdDBoUxMjBu1mlvv5Bt90GGRwyvEHGTMlT9cjs5YRpBJxEhksVyoL1Z4pwLAq3gKSj+PGW0HQhOSr8h7lyMG+9HJjL7pKeeds+Byn+TYnaium1MsGFg4TiE6Ztvr6rVpdaJSI3einSABuC1PCnNPkbHEdtwdrd8DU2jKcQ1fzderhmuJQE6pls6wwQjWF6sCTUTo/upUHUe0p5GY+7pKCHBXgNEhRhx3JgweiJN8ErxoiPCCIOdOScAEfcgZOgqQDGsJqnhuQ/5fKqg==:passwordOfTheUser');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
var_export(curl_getinfo($ch))."\n";

getInfo の中身を見てみるとこんな感じ

[...]
'request_header' => 'GET /uriNotRelevant.queryString=Data HTTP/1.1
Authorization: Digest     username="BmN+GP4VBev5tVzJU/altsyXXw0PXYcunbT8F8EatlbpctBXZp1OO2ySQyekZb5729qQPkdwdDBoUxMjBu1mlvv5Bt90GGRwyvEHGTMlT9cjs5YRpBJxEhksVyoL1Z4pwLAq3gKSj+PGW0HQhOSr8h7lyMG+9HJjL7pKeeds+Byn+TYnaium1MsGFg4TiE6Ztvr6rVpdaJSI3einSABuC1PCnNPkbHEdtwdrd8DU2jKcQ1fzderhmuJQE6pls6w", realm="SVCCompagnonRelay Digest Authentication", nonce="MTM1NDQ4Nzc2NjkzNjoxYTRhMThkOTk5Yjc4OWY1Y2Q0MWQ3NzY3NzRlYzFlYw==", uri="/uriNotRelevant.queryString=Data", cnonce="MTczNDU1", nc=00000001, qop="auth", response="c319b14a40bf54955b764117d7f4bbc3"
Host: example.org
Accept: */*
Cookie: MBLPRDSession=C7B717115F119BAAB5C5BC308DD7FB18; WASMBLPRD2AND=mbltrap21and

',
)

login:password を含むヘッダーが切り捨てられていることがわかります。Header を手動で設定しようとしましたが、DIGEST プロトコルを再現するのは難しいと思いました

私は今何をすべきかわかりません:-(

ダイジェストのログイン サイズを大きくする方法はありますか?

Edit² : 問題を修正しました。私の解決策を参照してください

4

1 に答える 1

0

CURLのソースコードを検索したところ、次のことがわかりました。

//http_digets.c
#define MAX_VALUE_LENGTH 256
#define MAX_CONTENT_LENGTH 1024

//urldata.c
#define MAX_CURL_USER_LENGTH 256
#define MAX_CURL_PASSWORD_LENGTH 256
#define MAX_CURL_USER_LENGTH_TXT "255"
#define MAX_CURL_PASSWORD_LENGTH_TXT "255"

おそらくこれが、ヘッダーが 256 文字で切り捨てられている理由です。より高い値で curl を再コンパイルして、問題が解決するかどうかを確認します。

urldata.c のデータを 4096 と 4095 に変更しました (これは大きいですが)。PHPで問題を修正しました。別の問題が発生しました。コマンドラインでcurlを使用できません

#curl http://google.fr
curl: (2) Failed initialization

しかし、何も変更しなくても、この問題があります。私の改造とは関係ありません。私のシステムでは、バージョンが更新されすぎている可能性があります (最後のバージョン)。これは別の質問です。とにかく、私はウェブサーバーのコマンドラインでそれを使用しません.

于 2012-12-03T22:00:45.310 に答える