0

現在、Adobe Flex 4.6 を使用してモバイル アプリケーションを開発していますが、HTTP サービス機能の使用に問題があります。以下に示すような HTTP リクエストを使用しようとしています。

http://api.somesite.co.uk/api/v1/data?api_key=00000aaaaa111111&area=ロンドン

データメニューを使用してサービスをインポートし、必要なパラメーターを使用してテストしました。サービスでテストを実行すると、データが正常にプルバックされ、「テスト操作」ビューに表示されます。

ただし、次のコードをビューに追加してアプリケーションをテストすると、2032 エラーが返されます。

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark"
        xmlns:myservice="services.myservice.*"
        initialize="view1_initializeHandler(event)" title="list">
    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;
            import mx.rpc.events.FaultEvent;
            import mx.rpc.events.ResultEvent;

            import spark.events.IndexChangeEvent;

            protected function view1_initializeHandler(event:FlexEvent):void
            {
                // TODO Auto-generated method stub
                var api_key:String = "00000aaaaa111111"
                var area:String = "London";

                listResult.addEventListener(ResultEvent.RESULT, onResult);
                listResult.addEventListener(FaultEvent.FAULT, httpFault);
                listResult.token = service.list(api_key, area);

                trace(listResult.token);
            }

            public function httpFault(event:FaultEvent):void { 
                var faultstring:String = event.fault.faultDetail; 
                trace("The Fault is: " + faultstring); 
            } 

            protected function onResult (event:ResultEvent):void
            {

            }

            protected function list_changeHandler(event:IndexChangeEvent):void
            {

            }

            protected function list_creationCompleteHandler(event:FlexEvent):void
            {

            }

        ]]>
    </fx:Script>
    <fx:Declarations>
        <s:CallResponder id="listResult" result="data=listResult.lastResult"/>
        <myservice:MyService id="service"/>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

    <s:List id="list" left="0" right="0" top="0" bottom="85" fontSize="20" contentBackgroundColor="#272727"
            creationComplete="list_creationCompleteHandler(event)" change="list_changeHandler(event)">
        <s:AsyncListView list="{data}"/>
        <s:itemRenderer>
            <fx:Component>
                <s:IconItemRenderer
                    labelFunction="Name"
                    iconFunction="getImageURL"
                    iconHeight="80"
                    iconWidth="80">
                    <fx:Script>
                        <![CDATA[
                            import valueObjects.Item;

                            private function Name(item: Object):String
                            {
                                var item:Item = Item(item);
                                return listing.name;
                            }

                            private function getImageURL(item: Object):String
                            {
                                var item:Item = Item(item);
                                return listing.image_url;
                            }

                        ]]>
                    </fx:Script>
                </s:IconItemRenderer>
            </fx:Component>
        </s:itemRenderer>
    </s:List>

</s:View>

上記のコードを使用して、コードがビューから実行されたときに不明な愚かな理由により、送信された URL が間違っており、下に示すようにアンダースコアが %5F に置き換えられているという事実に問題を追跡することができました。

http://api.somesite.co.uk/api/v1/data?area=ロンドン&api%5Fkey=00000aaaaa111111

この問題を回避するのを手伝ってくれる人はいますか?

ありがとう

編集......

やあ、

URL が間違っていた場合、「テスト操作」ビューで実行すると失敗することが予想されますが、期待どおりのデータが返され、すべて正常に見えます。渡された api_key のアンダースコアを置き換えるという問題が発生するビューに適用しようとした場合のみです。私が使用しているサービスは、以下の URL にある Zoopla です。

http://developer.zoopla.com/docs/Property_listings

もしあなたがこれを見て私に知らせてくれたら、私は3つのパラメータを渡しています:

  1. api_key
  2. 出品状況
  3. 範囲

デバッグ データから、アンダースコアが変更されていることがわかります。この変更された URL を別のプログラムで実行しようとすると失敗しますが、単純にそのapi%5Fkey部分を api_key に変更して他のプログラムで再度実行すると、それが返されます。データ。だから私は api_key アンダースコアが問題であると信じており、これを解決する方法がわからない、またはビューでは機能しないのにテストビューでは機能する理由がわかりません?? 何か案は?

編集 2 ...

最近、コードを次のように更新しました。

protected function list_creationCompleteHandler(event:FlexEvent):void
{   
    var params:Object = new Object();
    params.api_key = "MY_API_KEY";
    params.area = "London";
    params.listing_status = "rent";
    params.page_size = 100;
    srv.send(params);
}

<fx:Declarations>
    <s:HTTPService id="srv" url="http://api.zoopla.co.uk/api/v1/property_listings?"
                   method="GET" 
                   result="srv_resultHandler(event)" 
                   fault="srv_faultHandler(event)" useProxy="false"/>
</fx:Declarations>

上記のコードを使用すると、以下のエラーが表示されます。コードが何らかの方法で URL を変更し、新しいめちゃくちゃな URL を作成しているようです :-S

フォルトは次のとおりです。

Error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: Stream Error. URL: http://localhost:37813/api/v1/property_listings?&page%5Fsize=100&api%5Fkey=MY_API_KEY&area=London&listing%5Fstatus=rent?hostport=api.zoopla.co.uk&https=N&id=F91A1C6D-8E19-9F50-EAEF-05DA5601D98D" errorID=2032]. URL: http://api.zoopla.co.uk/api/v1/property_listings?
4

1 に答える 1

0

わかりましたので、最初に反対側のサーバーが処理する必要がありますが、明らかにそうではありません...

パラメータのエンコーディングは「機能」です。これを防ぐには、send メソッドに params オブジェクトを渡さないでください。代わりに、次のようにリクエスト文字列を手動で作成します。

var :myurl:String = "http://api.zoopla.co.uk/whatever?api_key=123&listing_status=45";
service.url = myurl;
service.send();
于 2012-11-07T20:40:32.637 に答える