0

現在、サーバー上にある PHP ファイルにリクエストを送信する必要がある Windows Phone でモバイル アプリを開発しています。

サーバー上ではリクエストがエラーをスローするという問題が発生していますが、コードを変更してローカル PHP ファイルをページングするとエラーは発生しません。理由はありますか?

これが私のリクエストコードです:

     string sendString = "";
        sendString += "&lat=" + (App.Current as App).mapCenter.Latitude;
        sendString += "&lng=" + (App.Current as App).mapCenter.Longitude;
        sendString += "&address=" + (App.Current as App).locationAddress;
        if (checkNumber(CountryCode.Text, AreaCode.Text, Number.Text))
        {
            sendString += "&phone=" + CountryCode.Text + "" + AreaCode.Text + "" + Number.Text;
        }
        else
        {
            MessageBox.Show("Phone number invalid");
        }
        if (checkEmail(email.Text))
        {
            sendString += "&email=" + email.Text;
        }
        else
        {
            MessageBox.Show("Invalid Email");
        }
        sendString += "device=WindowsPhone";
        sendString += (bool)prefsms.IsChecked ? "&contactMethod=sms" : "&contactMethod=email";
        ListPickerItem selectedItem = (ListPickerItem)ServiceType.SelectedItem; //Cast listpickeritem into String
        string content = (string)selectedItem.Content;
        sendString += "&serviceType=" + content;
        sendString += "&version=2.0";
        sendString += "&language=" + CultureInfo.CurrentUICulture.TwoLetterISOLanguageName;
        (App.Current as App).watcher.Stop();
        sendData = sendString;


        if ((checkNumber(CountryCode.Text, AreaCode.Text, Number.Text)) && (checkEmail(email.Text)))
        {
            //Send data to server 
            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://localhost/test.php");
            myRequest.Method = "POST";
            myRequest.ContentType = "application/x-www-form-urlencoded";
            myRequest.BeginGetRequestStream(new AsyncCallback(RequestCallBack), myRequest);
        }
        else
        {
        }

private void RequestCallBack(IAsyncResult asyncresult)
{
        HttpWebRequest myRequest = asyncresult.AsyncState as HttpWebRequest;
        Stream dataStream = myRequest.EndGetRequestStream(asyncresult);
        //Avoid trashing procedure
        this.Dispatcher.BeginInvoke(delegate()
        {
            StreamWriter writer = new StreamWriter(dataStream);
            writer.Write(sendData);
            writer.Flush();
            writer.Close();
            //Expect a response
            myRequest.BeginGetResponse(new AsyncCallback(ResponseCallBack), myRequest);
        });

    }
  private void ResponseCallBack(IAsyncResult asyncresult)
    {
        HttpWebRequest myRequest = asyncresult.AsyncState as HttpWebRequest;
        HttpWebResponse myResponse = (HttpWebResponse)myRequest.EndGetResponse(asyncresult);
        // Avoid trashing the procedure
        this.Dispatcher.BeginInvoke(delegate()
        {
            // Retrieve response stream
            Stream responseStream = myResponse.GetResponseStream();
            StreamReader reader = new StreamReader(responseStream);
            // Show response
            responseTxt = reader.ReadToEnd();
            MessageBox.Show("" + responseTxt);
        });

    }

サーバーに文字列を送信すると、サーバーの PHP コードは次のようになります (テスト用の php はまったく同じです)。

require_once("includes/globals.php");

$vars = ($PRODUCTION)?$_POST:$_REQUEST;

$MINIMUM_VERSION = 2.0;
function validServiceType($type)
{
return $type == "taxi" || $type == "ladies" || $type == "limo" || $type ==   "handicap";
}

if(!isset($vars['version']) || ((float)$vars['version']) < $MINIMUM_VERSION)
{
echo "oldVersion";
}
elseif(isset($vars['lat'], $vars['lng'], $vars['phone'], $vars['language']))
{
     /*do stuff */
if($data['contactMethod'] == "email" && $data['email'] == "")
{
    echo "invalid";
    die();
}
if(DB_AddHail($data))
    echo "processing";
else if (($company = DB_GetReferralTaxi($data['lat'], $data['lng'], $data['serviceType'])))
{
    /*do some more stuff*/
}
else
    echo "sorry";
}
else
{
echo "invalid";
}

?>

OldVersion エラーが発生し続けますが、バージョン番号を既に 2.0 に設定しています...何が起こっているのかについてのアイデアはありますか?

更新: 問題の原因を突き止めることができました。HttpWebRequest はサーバーにデータをまったく送信していません。私の $_POST は単なる空の配列です。理由についてのアイデアはありますか?

更新 2: エラー 302 (「使用していた URI は、https:// ではなく http:// でした。ただし、プロトコルを https:// に変更しても、まだ機能しません。私のコードはその部分で間違っていますか?

4

2 に答える 2

0

5.4.3を使用していることを確認し、phpinfo();を使用してスクリプトを実行します。チェックする。POSTリクエストの代わりにGETリクエストを送受信するようにPHP/C#に変更してみてください。

そうすれば、期待どおりの結果が得られている場合は、少なくともhttp://yourdomain.com/script.php?name=John+Smith&Age=23などのブラウザーからphpスクリプトにリクエストを送信するかどうかをテストできます。https://addons.mozilla.org/en-US/firefox/addon/live-http-headers/をダウンロードして、結果を確認するときにブラウザーの観点からヘッダーがどのように機能しているかを確認します。

于 2012-06-19T21:28:41.303 に答える
0

if(!isset($vars['version']) で始まる行の直前に、次を追加してみてください:

echo "version: " . $vars['version']; 
exit; 

ブラウザに何かが出力されるかどうかを確認します。使用している php のバージョンが $vars = ($PRODUCTION)?$_POST:$_REQUEST; を好まない可能性があります。構文、および手動で実行する必要がある場合があります。

$vars['version']=$_POST['version']; 
$vars['somethingElse']=$_POST['somethingElse'] 

等...

于 2012-06-19T21:24:29.233 に答える