フォーラム一覧   -   トピック一覧
   ActionScript 3.0
     URLRequestHeader#requestHeadersが反映されない
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
teppei
投稿日時: 2007-7-16 13:40
やや 常連さん
登録日: 2006-5-10
居住地:
投稿: 22
URLRequestHeader#requestHeadersが反映されない
こんにちわ。

今、はてなのブックマークのWebサービスにFlexで接続しようとしております。

WSSE認証のために、HTTPヘッダーに認証情報を付加したいのですが、
URLRequestのURLRequestHeaderメソッドを使っても
Header情報が付加されません。

HTTPヘッダー情報を付加するのに何か他に必要なことがあるのでしょうか?
ご教示よろしくお願いいたします。


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
	
	<mx:Script>
		<![CDATA[
			import mx.rpc.events.FaultEvent;
			import mx.rpc.events.ResultEvent;
			import mx.rpc.http.HTTPService;
			import com.adobe.crypto.WSSEUsernameToken;
			
			private function sample():void{
				
				var wsse:String = WSSEUsernameToken.getUsernameToken("userName","password");
				trace(wsse);
				
				var req:URLRequest = new URLRequest("http://b.hatena.ne.jp/atom/feed");

				var hdrWsse:URLRequestHeader = new URLRequestHeader("X-WSSE",wsse);
				req.requestHeaders.push(hdrWsse);

				req.contentType = "application/x.atom+xml";

				var loader:URLLoader = new URLLoader();

				loader.addEventListener(HTTPStatusEvent.HTTP_STATUS,loaderHandler);
				loader.addEventListener(IOErrorEvent.IO_ERROR,loaderHandler);
				loader.addEventListener(ProgressEvent.PROGRESS,loaderHandler);
				loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,loaderHandler);
				loader.addEventListener(Event.COMPLETE,loaderHandler);

				loader.load(req);
				
			}
			
			private function loaderHandler(e:Event):void{
				resultTxt.text = resultTxt.text + e.type + "\n";
			}
			
		]]>
	</mx:Script>
	
	<mx:Button id="btn" label="BUTTON" click="sample()"/>
	
	<mx:TextArea id="resultTxt" width="434" height="265"/>
	
</mx:Application>




Headerはこの↓のようになっていて、まったく反映されません。
GET http://b.hatena.ne.jp/atom/feed HTTP/1.0
Accept: */*
Referer: file://C:\EclipseWork\Hatena\bin\Hatena-debug.swf
x-flash-version: 9,0,47,0
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: b.hatena.ne.jp
Cookie: b=92c0f3b7a322e325fb3c2e0632f88c354bc2cba8



環境は、
Flex:2.0.1
IE:6.0.2900
FlashPlayer:9,0,47,0

ヘッダーの確認には、
横取り丸1.98と、InetSpy1.1を
使っております。

よろしくお願いいたします。



satoshi
投稿日時: 2007-7-16 14:31
管理人
登録日: 2006-1-9
居住地: 高田馬場
投稿: 350
Re: URLRequestHeader#requestHeadersが反映されない
こんにちは、satoshiです。

はてなは、FlashからのAPI操作は許可していない気がしました。
いわゆる、crossdomain.xml制限かと。


http://i.hatena.ne.jp/idea/8635


AIRならローカルアプリですからcrossdomain.xmlの制限を
受けることなくAPI操作できると思いますよ。


どうしても実現する場合には、
サーバーサイド(JavaとかPHP)でプロキシして通信する感じです。


teppei
投稿日時: 2007-7-16 15:22
やや 常連さん
登録日: 2006-5-10
居住地:
投稿: 22
Re: URLRequestHeader#requestHeadersが反映されない
早速のご回答ありがとうございます。

>はてなは、FlashからのAPI操作は許可していない気がしました。

おお〜。その辺は思いっきり見落としてました。

でも、この方↓はうまく行ってるんですよね〜・・・
http://d.hatena.ne.jp/butyricacid/20070611/1181517942

しかも、そもそもHTTPヘッダーの付加さえできていない状況で、
それ以前の問題でつまずいてしまっています。

crossdomain.xml制限だと、セキュリティサンドボックス侵害エラー
とかになった気がするんですが、IOErrorになっています。

応答のHTTPヘッダーはこんな↓感じです。

HTTP/1.1 401 Authorization Required
Date: Mon, 16 Jul 2007 04:28:59 GMT
Server: Apache/2.2.4 (Unix)
WWW-Authenticate: WSSE profile="UsernameToken"
Status: 401 X-WSSE authentication required
X-Framework: Hatena/2.0
Content-Length: 30
Content-Type: text/html; charset=iso-8859-1
Vary: Accept-Encoding
Keep-Alive: timeout=5, max=100
Proxy-Connection: Keep-Alive
Connection: Keep-Alive

X-WSSE authentication required

認証がもとめられているよってことなんだと思います。
ブラウザでURL(http://b.hatena.ne.jp/atom/feed)を
直指定しても同様の応答になるので、
やはりHTTPヘッダー情報につけようとしている認証情報が
ついていない状態なのだと思います。

そもそもHeader情報の付け方が間違っているんでしょうか??

すみませんが、ご教示よろしくお願いいたします。m(_ _)m
satoshi
投稿日時: 2007-7-16 15:59
管理人
登録日: 2006-1-9
居住地: 高田馬場
投稿: 350
Re: URLRequestHeader#requestHeadersが反映されない
>でも、この方↓はうまく行ってるんですよね〜・・・
>http://d.hatena.ne.jp/butyricacid/20070611/1181517942

上記のサイトなんですが、

ファイルのアップロードだけHTTPHTMLでやっているとか、
サーバ側のプログラムを用意しているとかありませんでしょうか?
teppei
投稿日時: 2007-7-17 23:05
やや 常連さん
登録日: 2006-5-10
居住地:
投稿: 22
Re: URLRequestHeader#requestHeadersが反映されない
その通りでした。
きちんとProxyサービス経由でやったらうまくいきました。

ありがとうございました。m(_ _)m

クライアントで実行するだけだと、ただのIOErrorだったのですが、
WEBサーバにデプロイすると、ちゃんとcrossdomain.xmlを要求して、SecurityErrorになりました。

そこまでFlashPlayerは見ているんですね。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を