かなり困ってます・・・どなたか詳しい方教えてください。

Google検索してもひっかからず、何が原因だか・・・さっぱりです。
※書き込む場所が違っていたら、教えてくださると助かります。
※本文が長過ぎるため、ソースは次のレスに書き込みます。

●言語 objective-c
●プラットフォーム iOS4
●やりたいこと Google ReaderからFeedをXMLで取得するためのHTTPReauestを作りたい
●こまっていること AuthorizationがHTTP Headerにセットされない

以下のソースの15行目でヘッダーにAuthorizationをセットしているのですが、20行目のLOGに出力されません。
もちろん、Feedも取得できず、ログインページのXMLがDownloadされます。

15行目で指定している[(NSString *)auth]を[NSString* auth=@"GoogleLogin auth=XXXXXXXXX"]と直書きしてやれば
ちゃんとLOGに出力されてFeedも取得できました。
なぜ変数で指定するとだめなのかがわかりません、どなたかご存知ないでしょうか?

回答の条件
  • 1人50回まで
  • 登録:2011/10/22 20:46:40
  • 終了:2011/10/29 20:50:08

回答(0件)

回答はまだありません

  • id:apple-orbit
    ソースコードを張ります。

    ●ソース
    01 /*
    02 * Google ReaderからFeedを取得するためのNSMutableURLRequestを返すメソッド
    03 * @pram (NSString *)auth : 取得済みのauthをNSUserDefaultに保存し、それをひっぱってきたものを指定
    04 */
    05 - (NSMutableURLRequest *) getFeedRequest:(NSString *)auth{
    06 NSString *url = @"http://www.google.com/reader/atom/user/-/state/com.google/reading-list";
    07 NSURL *reqUrl = [NSURL URLWithString:url];
    08 NSMutableURLRequest *postRequest = [NSMutableURLRequest requestWithURL:reqUrl];
    09
    10
    11 [postRequest setHTTPMethod:@"GET"];
    12 [postRequest setCachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData];
    13 [postRequest setHTTPShouldHandleCookies:NO];
    14
    15 [postRequest addValue:[@"GoogleLogin auth=" stringByAppendingString:auth] forHTTPHeaderField:@"Authorization"];
    16 [postRequest addValue:@"application/atom+xml" forHTTPHeaderField:@"Content-Type"];
    17
    18 NSLog(@"---------------------------------------");
    19 NSString *log = [postRequest allHTTPHeaderFields];
    20 NSLog(@"%@", log);
    21 NSLog(@"---------------------------------------");
    22
    23 return postRequest;
    24 }

    ●実行結果
    2011-10-22 19:03:04.508 XXXX[2187:b303] {
    "Content-Type" = "application/atom+xml";
    }
  • id:apple-orbit
    事故解決しました(かなり無理矢理?な方法なので、引き続き回答募集します)。

    - (NSMutableURLRequest *) getFeedRequest:(NSString *)auth{
    NSString *url = @"http://www.google.com/reader/atom/user/-/state/com.google/reading-list";
    NSURL *reqUrl = [NSURL URLWithString:url];
    NSMutableURLRequest *postRequest = [NSMutableURLRequest requestWithURL:reqUrl];

    [postRequest setHTTPMethod:@"GET"];
    [postRequest setCachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData];
    [postRequest setHTTPShouldHandleCookies:NO];

    // 元のままだとHTTP Headerになぜか組み込めないため、一度URLエンコードする。特殊文字はあえて変換しない
    NSString *ps = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
    (CFStringRef)auth,
    NULL,
    nil,
    kCFStringEncodingUTF8);
    // 文字列末尾の”%0A”を省く
    NSString* ptrAuth = [@"GoogleLogin auth=" stringByAppendingString:[ps substringWithRange:NSMakeRange(0,[ps length]-3)]];

    [postRequest addValue:ptrAuth forHTTPHeaderField:@"Authorization"];
    [postRequest addValue:@"application/atom+xml" forHTTPHeaderField:@"Content-Type"];

    return postRequest;
    }

    引き渡されたAuth文字列を、一旦URLエンコード(特殊文字はあえて除外)し、文字列末尾に追加される「%0A」を省いてやれば、正常に動作しました。

    エンコード前と後で文字列に「%0A」意外の変化が見られないため、なぜ動作しているのかわかりませんが・・・
    他にもっといいやり方をご存知の方がおられましたら、コメント頂けますと幸いです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません