簡體   English   中英

不返回正確的post方法結果

[英]not return correct post method result

我正在嘗試使用php / my sql在windows phone 8登錄功能中創建一個應用程序

我有以下PHP腳本:

在我的windows phone c#click事件中我寫了以下內容:

 private void btnLogin_Click(System.Object sender, System.Windows.RoutedEventArgs e)
        {

            Uri uri = new Uri(url, UriKind.Absolute);

            StringBuilder postData = new StringBuilder();
            postData.AppendFormat("{0}={1}", "email", HttpUtility.UrlEncode("Test@test.com"));
            postData.AppendFormat("&{0}={1}", "pwd1", HttpUtility.UrlEncode("password"));

            WebClient client = default(WebClient);
            client = new WebClient();
            client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
            client.Headers[HttpRequestHeader.ContentLength] = postData.Length.ToString();

            client.UploadStringCompleted += client_UploadStringCompleted;
            client.UploadProgressChanged += client_UploadProgressChanged;

            client.UploadStringAsync(uri, "POST", postData.ToString());

            prog = new ProgressIndicator();
            prog.IsIndeterminate = true;
            prog.IsVisible = true;
            prog.Text = "Loading....";
            SystemTray.SetProgressIndicator(this, prog);

        }

        private void client_UploadProgressChanged(object sender, UploadProgressChangedEventArgs e)
        {
            //Me.txtResult.Text = "Uploading.... " & e.ProgressPercentage & "%"
        }

        private void client_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)
        {
            if (e.Cancelled == false & e.Error == null)
            {
                prog.IsVisible = false;

                string[] result = e.Result.ToString().Split('|');
                string strStatus = result[0].ToString();
                string strMemberID = result[1].ToString();
                string strError = result[2].ToString();

                if (strStatus == "0")
                {
                    MessageBox.Show(strError);
                }
                else
                {
                    NavigationService.Navigate(new Uri("/DetailPage.xaml?sMemberID=" + strMemberID, UriKind.Relative));
                }

            }
        }

我的電子郵件和密碼是正確的,在我放的c#代碼中,但最后我總是收到這樣的消息: e.Result = "Incorrect username or password"

我下載了您的應用示例並進行了測試。 當我檢查應用程序使用Fiddler發送的請求時,它會發現應用程序正在發送您提供的信息。 所以你的POST方法正在做它的工作。

我測試甚至從Fiddler內部重新發送請求並獲得相同的結果,即。 更正POST信息,但錯誤的e.Result(用戶名或密碼不正確)。

所有這些讓我覺得問題不在你的應用程序或WebClient而不是服務器端。 請看一下。

順便說一下為什么要使用WebClient? 你可以使用HttpWebRequest或HttpClient。

你可以嘗試這樣使用

 client.Credentials = new NetworkCredential(usename, password);

我認為這可能會糾正你的問題。

您是否嘗試通過更改此操作來交換操作員:

If($mypass = $row['password'] and $myname = $row['email'])
{
$successBit = 1;

對此:

If($mypass = $row['password'] && $myname = $row['email'])
{
$successBit = 1;

我知道我聽說過某些服務器上的AND不兼容......即使它們應該以任何一種方式工作

哦,快! 我花了很長時間才意識到它為什么不起作用。

首先,您無法使用WebClient執行此任務。 原因是您的身份驗證是使用HTTP重定向構建的。 第一個腳本(verifylogin.php)返回成功的auth cookie並將WebClient重定向到另一個腳本(loginstatus.php),該腳本檢查cookie並顯示消息。 但是WebClient根本沒有將cookie從第一個腳本傳遞到另一個腳本,因此檢查失敗(並且讓你認為你做錯了什么)。

解決方案是使用WebRequest代替:

    StringBuilder postData = new StringBuilder();
    postData.AppendFormat("{0}={1}", "email", HttpUtility.UrlEncode("test@test.com"));
    postData.AppendFormat("&{0}={1}", "pwd1", HttpUtility.UrlEncode("password"));

    var request = (HttpWebRequest)WebRequest.Create("http://unotez.com/other/app/verifylogin.php");
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";
    request.AllowAutoRedirect = true;

    // magic happens here!
    // create a cookie container which will be shared across redirects
    var cookies = new CookieContainer();
    request.CookieContainer = cookies;

    using (var writer = new StreamWriter(request.GetRequestStream()))
        writer.Write(postData.ToString());

    // sync POST request here, but you can use async as well
    var response = (HttpWebResponse)request.GetResponse();

    string data;
    using (var reader = new StreamReader(response.GetResponseStream()))
        data = reader.ReadToEnd();

    Console.WriteLine(data);

    // Success, Welcome: Test

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM