2

http://myphotodiary.comの APIで認証する Safari の拡張機能を作成しようとしています。また、次のような特殊文字を含まないすべてのパスワードでうまく機能します。

å、ä、öとスペース

現在、次のコードが機能しています。

var xmlHttp = new XMLHttpRequest();

var url = "https://api.myphotodiary.com/user_status.json?api_key=66217f993f25a8a05dd72970473aa2227450dcad";

var username = "iphone";
var password = "bdbiphone123";

var authy = Base64.encode(username+":"+password);

xmlHttp.open('GET', url, true);
xmlHttp.setRequestHeader("Authorization", "Basic " + authy);
xmlHttp.onreadystatechange = function(){
if (xmlHttp.readyState == 4){
    var data;
    eval("data="+xmlHttp.responseText);
    console.log(data);
}
};
xmlHttp.send(null);

このコードは、特殊文字を含まないすべてのパスワードでうまく機能しますが、ログイン情報を

var username = "blpninja";
var password = "./ hejä";

失敗し始めます。

この正確なコードはSafariで機能しますが、拡張機能に入れると機能しません。

認証に組み込まれた xmlHttpRequest.open も試しました

xmlHttp.open('GET', url, true, username, password);

同じ結果で。

これはグローバルページの私の頭です:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

</head>

「リソースの読み込みに失敗しました: キャンセルされました」というメッセージが表示され、これらは Safari が送信しているヘッダーです。

Authorization:Basic YmxwbmluamE6Li8gaGVqw6Q=
Content-Type:text/xml; charset=utf-8
User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; sv-se) AppleWebKit/533.16 (KHTML, like Gecko)
4

1 に答える 1

2

よくわかりませんし、掘り下げる時間もありませんが、文字列のエンコードが役立つのではないでしょうか?

var username = encodeURIComponent("blpninja"), //=> sends: blpninja
    password = encodeURIComponent("./ hejä");  //=> sends: .%2F%20hej%C3%A4

サーバー側では、デコードされている可能性があります ( decodeURIComponent)

于 2010-06-23T08:17:13.343 に答える