トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     ActionScript 3.0で Google contacts API を利用 (400 Bad Request)
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
せいぞう
Åê¹ÆNo.46025
投稿日時: 2010-10-7 14:10
常連
居住地: 江戸川区の某所
投稿: 125
使用環境:
Flash CS5.5
Windows8 (64Bit)
Pentium Core i7
Memory 8GB
ActionScript 3.0で Google contacts API を利用 (400 Bad Request)
ActionScript 3.0を使って、Google contacts API を利用するソフトを作成しております。
下記の Googleサイトを参考に作っているのですが、新既コンタクトを作成(Creating contacts)する POST送信において
どうしても 「HTTP/1.1 400 Bad Request」が返ってきてしまいます。
http://code.google.com/intl/ja/apis/contacts/docs/3.0/developers_guide_protocol.html


Googleのサイトにも Folumがあり、ここにも多量の「Bad Request」についての書き込みがあります。
これら情報を漁り try & Error を繰り返してきましたが、解決に至っておりません。
勿論投稿もしましたが、私の下手な英語のせいか未だにレスポンスが頂けず、こちらのサイトに質問を
投げさせて頂きました。

(恥ずかしい英語ですが、こちらです↓)
http://www.google.com/support/forum/p/apps-apis/thread?tid=734eea30ae495064&hl=en


前置きが長くなりましたら、以下、現在試みているコードを添付します。
どうか、よろしくお願いします。m(_ _)m

//順序が逆ですが、最初に エラーのレスポンスを貼ります。

HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=UTF-8
Date: Thu, 07 Oct 2010 04:35:36 GMT
Expires: Thu, 07 Oct 2010 04:35:36 GMT
Cache-Control: private, max-age=0
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Content-Length: 33

Content is not allowed in prolog.


//以下が、現在試みているActionScript 3.0 コードです。

var CreateLoader:URLLoader;

function createSingleContactData():void{
//実際にはauthに ちゃんとした値が入ります。
   var DReq:URLRequest = new URLRequest("http://www.google.com/m8/feeds/contacts/default/full");
   DReq.method = URLRequestMethod.POST;
   DReq.requestHeaders.push(new URLRequestHeader("Authorization", "GoogleLogin auth=AAABBBCCCDDDEEEFFF"  ));
   DReq.requestHeaders.push(new URLRequestHeader("GData-Version", "3") );

   DReq.contentType = 'application/atom+xml';
   var requestVars:URLVariables = new URLVariables();
   requestVars.body =  retCreateXML();
   DReq.data = requestVars;

   CreateLoader = new URLLoader();
   CreateLoader.dataFormat = URLLoaderDataFormat.TEXT;
   CreateLoader.addEventListener(IOErrorEvent.IO_ERROR, createErr);
   CreateLoader.addEventListener(Event.COMPLETE , createComplete);
   CreateLoader.load( DReq );
}

function createErr(event:Event):void     { trace(ERR) }

function createComplete(event:Event):void{ trace(CreateLoader.data) }

//GoogleContactsサイトに記載の サンプルXMLをそのまま返す関数
function retCreateXML():String{
   var temp:String ="";
   temp +="<?xml+version='1.0'+encoding='UTF-8'+?>";
   temp +="<atom:entry xmlns:atom='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005'>";
   temp +="<atom:category scheme='http://schemas.google.com/g/2005#kind' term='http://(長いので略)/2008#contact' />";
   temp +="<gd:name>";
   temp +="<gd:givenName>Elizabeth</gd:givenName>";
   temp +="<gd:familyName>Bennet</gd:familyName>";
   temp +="<gd:fullName>Elizabeth Bennet</gd:fullName>";
   temp +="</gd:name>";
   temp +="<atom:content type='text'>Notes</atom:content>";
   temp +="<gd:email rel='http://(長いので略)='E. Bennet' />";
   temp +="<gd:email rel='http://(長いので略).org' />";
   temp +="<gd:phoneNumber rel='http://schemas.google.com/g/2005#work' primary='true'>(206)555-1212</gd:phoneNumber>";
   temp +="<gd:phoneNumber rel='http://(長いので略)#home'>(206)555-1213</gd:phoneNumber>";
   temp +="<gd:im (長いので略)/g/2005#home' />";
   temp +="<gd:structuredPostalAddress rel='http://schemas.google.com/g/2005#work' primary='true'>";
   temp +="<gd:city>Mountain View</gd:city>";
   temp +="<gd:street>1600 Amphitheatre Pkwy</gd:street>";
   temp +="<gd:region>CA</gd:region>";
   temp +="<gd:postcode>94043</gd:postcode>";
   temp +="<gd:country>United States</gd:country>";
   temp +="<gd:formattedAddress>1600 Amphitheatre Pkwy Mountain View</gd:formattedAddress>";
   temp +="</gd:structuredPostalAddress>";
   temp +="</atom:entry>";
   return(temp);
}


----------------
□NAME : せいぞう
□URL : http://www.5th-trend.com/

せいぞう
Åê¹ÆNo.46029
投稿日時: 2010-10-8 8:16
常連
居住地: 江戸川区の某所
投稿: 125
使用環境:
Flash CS5.5
Windows8 (64Bit)
Pentium Core i7
Memory 8GB
Re: ActionScript 3.0で Google contacts API を利用 (400 Bad Request)
投稿者のseizoです。
ひとつ重要な情報が欠落していました。
エラーのHTTPレスポンスは掲載したけれど、どんな HTTPリクエストを送ったのか? という情報です。

以下に HTTPリクエストを記載しておきます。
ちょっと 厄介な投稿かもしれませんが、どうかよろしくお願いします。m(_ _)m

POST http://www.google.com/m8/feeds/contacts/default/full HTTP/1.1
Referer: app:/GGLContacts.swf
Accept: text/xml, application(ズラズラ長いので 略す)/mp4, application/futuresplash, */*;q=0.5
x-flash-version: 10,1,53,32
Content-Type: application/atom+xml
GData-Version: 3
Authorization: GoogleLogin auth=AAABBBCCCDDD(ここにAuthが入っています)
Content-Length: 2030
User-Agent: Mozilla/5.0 (Windows; U; ja-JP) AppleWebKit/531.9 (KHTML, like Gecko) AdobeAIR/2.0.1
Host: www.google.com
Connection: Keep-Alive
Pragma: no-cache
Cookie: PREF=ID=70b7205f9b:FF=0:TB=5:TM=******:LM=*******3:S=****

body=%3C%3Fxml%2Bversion%3D%271%2E0%27%2B・・・・(ここにエンコードされたAtomフィードが入っています)


----------------
□NAME : せいぞう
□URL : http://www.5th-trend.com/

961832p
Åê¹ÆNo.46036
投稿日時: 2010-10-8 14:10
常連
居住地: Akiruno-shi
投稿: 155
使用環境:
 
:AS3:
- Adobe Flex SDK, Eclipse, AIR GEAR
- LB.Log AS3, Alcon2

:AS2:
- AMES(ASDT, MTASC, Eclipse, swfmill)
- Natural Entry Point Method
- LB.Log, Zeroi

Pro, Firefox, Chromium(Iron), IE

----------------
Pro,
Re: ActionScript 3.0で Google contacts API を利用 (400 Bad Request)
 
以前、自分が参加したスレッドと同じような処理の流れだったので、何かヒントとなるものがあるかもしれません。
 ・【Youtube Data API】Youtube動画を「お気に入り」に追加したい。(FLASH-JP.COM - フォーラム)
URLLoaderのかわりにSocketURLLoaderを使っている事と、リクエストデータにURLVariablesを使ってないことが大まかな違いでしょうか。

スクリプトやHTTPステータスの部分は [code][/code] を使って見やすくすることで、他のかたにも見てもらいやすくなると思います。


----------------
:961832p:
- だんだんAS3に慣れてきた“なんちゃって”AMES使いの日曜プログラマー

せいぞう
Åê¹ÆNo.46037
投稿日時: 2010-10-8 14:30
常連
居住地: 江戸川区の某所
投稿: 125
使用環境:
Flash CS5.5
Windows8 (64Bit)
Pentium Core i7
Memory 8GB
Re: ActionScript 3.0で Google contacts API を利用 (400 Bad Request)
961832p さん、ご助言ありがとうございます。
早速読ませて頂きます。
何かわかりましたら、ここに投稿致します。
先ずはお礼まで。

PS:[code][/code]のご助言もありがとうございます。
先ほど修正致しました。m(_ _)m


----------------
□NAME : せいぞう
□URL : http://www.5th-trend.com/

せいぞう
Åê¹ÆNo.46038
投稿日時: 2010-10-8 17:04
常連
居住地: 江戸川区の某所
投稿: 125
使用環境:
Flash CS5.5
Windows8 (64Bit)
Pentium Core i7
Memory 8GB
Re: ActionScript 3.0で Google contacts API を利用 (400 Bad Request)
961832p さん、先ほどはありがとうございました。
早速試してみました。

Event.COMPLETE で設定したハンドラで、なにやらデーターを受け取っていることがわかりました。
一歩前進しました。
ただ、このレスポンスが「Content is not allowed in prolog.」というCautionであったのが残念なところです。


もうひとつだけ、質問を投稿させて頂いてよろしいでしょうか。

Web検索で、いろいろ調べたところ、「Content is not allowed in prolog.」というコメントは
BOM付きのUTF-8のデータ送信で発生することがあるらしいのですが、私の場合は上記スクリプトの通り
AtomフィードをActionScriptで生成しているので、これには当てはまらないかと思っています。

もう何でもやっちゃえ と言うことで、ActionScriptで生成した Atomフィードを・・・
encodeURI や encodeURIComponent でエンコードしてみましたが、結果は同じ「Content is not allowed in prolog.」でした。

たいへん恐縮ですが、何か知恵をご教授頂ければ幸いです。
よろしくお願いします。


(メモ)
Google Codeに掲載されているこの SocketURLLoader ↓ は中身がちがいますね?。
http://code.google.com/p/as3httpclient/downloads/list
こちらから、一個ずつダウンロードしました。(^^;)
http://as3httpclient.googlecode.com/svn/trunk/

では


----------------
□NAME : せいぞう
□URL : http://www.5th-trend.com/

961832p
Åê¹ÆNo.46039
投稿日時: 2010-10-8 18:34
常連
居住地: Akiruno-shi
投稿: 155
使用環境:
 
:AS3:
- Adobe Flex SDK, Eclipse, AIR GEAR
- LB.Log AS3, Alcon2

:AS2:
- AMES(ASDT, MTASC, Eclipse, swfmill)
- Natural Entry Point Method
- LB.Log, Zeroi

Pro, Firefox, Chromium(Iron), IE

----------------
Pro,
Re: ActionScript 3.0で Google contacts API を利用 (400 Bad Request)
 
seizo さん、返信ありがとうございます。
なるほど、送る内容のどこかに原因が潜んでいそうですね。

なので投稿されてありますスクリプトの、XMLデータ生成しているところをよく見てみると、
なぜかXML宣言(<?xml?)の部分だけ空白文字が「+(プラス)」になっていました。
この部分、実際のスクリプトでは空白文字になっていますでしょうか?


----------------
:961832p:
- だんだんAS3に慣れてきた“なんちゃって”AMES使いの日曜プログラマー

せいぞう
Åê¹ÆNo.46040
投稿日時: 2010-10-8 19:17
常連
居住地: 江戸川区の某所
投稿: 125
使用環境:
Flash CS5.5
Windows8 (64Bit)
Pentium Core i7
Memory 8GB
Re: ActionScript 3.0で Google contacts API を利用 (400 Bad Request)
961832p さん、
再びご助言ありがとうございます。

空白文字が「+(プラス)」・・・・そのとおりです。
お恥ずかしいと共に、「これで行くかも!?」と色めいたのですが、残念ながら結果は同じ「Content is not allowed in prolog.」でした。
ケアレスミスを2度もしてはいけないので、今回は URLVariables にセットする直前でXML内容を出力させ、確認しました。

また、今回は下記2パターンも試しましたが、これも同じ結果でした。

試み(1):HTTPのBodyが body=AtomFeed となる場合

var requestVars:URLVariables = new URLVariables();
requestVars.body =  retCreateXML();

試み(2):HTTPのBodyが AtomFeed だけになる場合

var requestVars:URLVariables = new URLVariables(retCreateXML());



(余談)
HTTP交信のモニタには、fiddlerを使っているのですが、SocketURLLoader での交信内容はモニタされないんですね。
不便だぁ(--;)


----------------
□NAME : せいぞう
□URL : http://www.5th-trend.com/

961832p
Åê¹ÆNo.46047
投稿日時: 2010-10-9 10:52
常連
居住地: Akiruno-shi
投稿: 155
使用環境:
 
:AS3:
- Adobe Flex SDK, Eclipse, AIR GEAR
- LB.Log AS3, Alcon2

:AS2:
- AMES(ASDT, MTASC, Eclipse, swfmill)
- Natural Entry Point Method
- LB.Log, Zeroi

Pro, Firefox, Chromium(Iron), IE

----------------
Pro,
Re: ActionScript 3.0で Google contacts API を利用 (400 Bad Request)
 
seizo さん、確認ありがとうございます。

モヤモヤするので、自分も実際に試してみることに(スクリーンショット)。
前出の Youtube Data API の時に作ったスクリプトを少し変更してAIRで実行してみたのですが、エラーが再現されずに成功してしまいます(汗)。

投稿されてありますスクリプトと見比べてみても処理自体はそう大差ないような感じがするので、そうなると本当に文字コードが影響しているのでしょうか…謎です。
ひとまず今回使用したソースファイルをアップロードしましたので、文字コードなどに相違があるのか比べてみるのも手がかりを掴むのに役立つかもしれません(ソースファイルはBOM無UTF-8です)。
 ・ソースファイル ※ZIP形式です

ちなみに成功するとGoogleアカウントにある連絡先の項目へ、送信した情報が追加されていました。


----------------
:961832p:
- だんだんAS3に慣れてきた“なんちゃって”AMES使いの日曜プログラマー

せいぞう
Åê¹ÆNo.46048
投稿日時: 2010-10-9 12:01
常連
居住地: 江戸川区の某所
投稿: 125
使用環境:
Flash CS5.5
Windows8 (64Bit)
Pentium Core i7
Memory 8GB
Re: ActionScript 3.0で Google contacts API を利用 (400 Bad Request)
961832p さん、何から何までほんとうに恐れ入ります。m(_ _)m
早速ダウンロードし試させて頂きます。
先ずは、お礼まで。

m(_ _)m


----------------
□NAME : せいぞう
□URL : http://www.5th-trend.com/

せいぞう
Åê¹ÆNo.46050
投稿日時: 2010-10-9 15:16
常連
居住地: 江戸川区の某所
投稿: 125
使用環境:
Flash CS5.5
Windows8 (64Bit)
Pentium Core i7
Memory 8GB
Re: ActionScript 3.0で Google contacts API を利用 (400 Bad Request)
961832p さん、たいへんお世話になりました。
お陰様で、Google Contacts API と会話が出来るようになりました。m(_ _)m

今回教わったポイント(私が間違っていたポイント)は、URLRequest へのデータセット方法でした。
簡単に書くと、下のようにようになります。
(誤)URLRequest ← URLVariables ← AtomFeed
(正)URLRequest ← AtomFeed

つまり、URLVariablesを使わない方が正しいということです。
スクリプトは以下の通りです。


import code.google.as3httpclient.SocketURLLoader;
var urlloader:SocketURLLoader = new SocketURLLoader();

function testFunc():void{
//function updateSingleContactData():void{
   var req:URLRequest = new URLRequest("http://www.google.com/m8/feeds/contacts/default/full");
   req.method = URLRequestMethod.POST;
   req.contentType = "application/atom+xml";
   req.requestHeaders.push(new URLRequestHeader("Authorization", "GoogleLogin auth=" + AuthToken));
   req.requestHeaders.push(new URLRequestHeader("GData-Version", "3") );

   //★(誤)昨日テストしていた手法
   //var requestVars:URLVariables = new URLVariables();
   //requestVars.body = retCreateXML();
   //req.data = requestVars;

   //★(正)今回教わった手法
   req.data = retCreateXML();

   urlloader.addEventListener(IOErrorEvent.IO_ERROR, createErr);
   urlloader.addEventListener(Event.COMPLETE, createComplete);
   urlloader.load(req);
}



もうひとつ発見したことがあります。
SocketURLLoader を使わずに、URLLoader でも正常に動作しました。

//var urlloader:SocketURLLoader = new SocketURLLoader();	//コメントアウトした
var urlloader:URLLoader = new URLLoader();			//こちらを使ってみた。


尚、私のテスト環境は、FlashCS5 です。
961832p さんから頂いたコードを参考に、Flashに組み込んで動かしました。


以上、文章ではなかなか伝わらないかと思いますが、多大な感謝の気持ちをここに表します。
ありがとうございました。m(_ _)m


----------------
□NAME : せいぞう
□URL : http://www.5th-trend.com/

(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops