0

私はMonodroid(Android用Mono)で書いているアプリをテストしています。基本的に、私はいくつかの単純なデータを php 投稿 (http:// [my-domain]/register_php?/usrname=blabla&usremail=blabla) を介してデータベースに保存しています (無料の Web ホスティング サービス 000webhost.com を使用しています)。

成功した場合、phpページは単純な文字列で応答を返します

<?php
         (...)
      if( $success )
      {
          echo "Success";
      }else{
          echo "Failure";
      }
   >

しかし、私のAndroidアプリでは、この単純な文字列が答えとして返されません。むしろ、000webhost.com が提供するサービスを宣伝する完全な HTML ページを受け取ります。しかし、Chrome ブラウザーに URL を入力すると、すべてが正常に機能し、適切なステータスが表示されます (成功したかどうかに関係なく)。

データを投稿するコードは次のとおりです。

byte[] post_data = Encoding.ASCII.GetBytes(string.Format("name={0}&email=
{1}",txt_usr_name.Text,txt_usr_email .Text) );
HttpWebRequest wb_request = 
(HttpWebRequest )WebRequest.Create("http://[my-domain]/register_user.php" );
wb_request.Method = "POST";
wb_request.ContentType = "application/x-www-form-urlencoded";
wb_request.ContentLength = post_data.Length;

Stream stream = wb_request.GetRequestStream();
stream.Write( post_data, 0, post_data.Length );
stream.Close();

そして、応答を読み返すコードは次のとおりです。

    HttpWebResponse wb_response = ( HttpWebResponse )wb_request.GetResponse();

    string status_code = wb_response.StatusCode.ToString();
    string server = wb_response.Server.ToString();

    Stream answer = wb_response.GetResponseStream();
    StreamReader ans_reader = new StreamReader( answer );

    string result = ans_reader.ReadToEnd();

    AlertDialog.Builder builder = new AlertDialog.Builder( this );
    builder.SetTitle( "Connection result" );
    builder.SetMessage( result );
    builder.SetPositiveButton( "OK", delegate { } );
    var dialog = builder.Create();
    dialog.Show();

Web サービスを呼び出すときに設定するのを忘れているものはありますか? ご助力ありがとうございます

4

1 に答える 1

0

あなたの無料の Web サービスは、PHP ページの前に別のフィルターを配置していると思います。

PHP を使用するかどうかを決定するために、accept や user-agent などの HTTP ヘッダーを使用している可能性があります。

優れた Fiddler2 ツール内の Request Builder (現在は Composer と呼ばれています) を使用して、HTTP 要求を作成してみてください。数分以内に、送信する必要があるヘッダーを見つけることができます。

http://www.fiddler2.com/fiddler2/

于 2013-02-24T10:27:56.503 に答える