[英]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.