I can't login to website using httpwebrequest - windows-phone-8

I'm trying login to website(example: https://www.facebook.com/login.php?login_attempt=1) using httpwebrequest by POST. But It's not return result after login.
I don't know what is wrong with my code, can you help me? Thanks so much!
This is my code:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
System.Uri myUri = new System.Uri("https://www.facebook.com/login.php?login_attempt=1");
HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(myUri);
myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), myRequest);
}
void GetRequestStreamCallback(IAsyncResult callbackResult)
{
HttpWebRequest myRequest = (HttpWebRequest)callbackResult.AsyncState;
// End the stream request operation
Stream postStream = myRequest.EndGetRequestStream(callbackResult);
StringBuilder postData = new StringBuilder();
postData.Append("email=myEmail");
postData.Append("&password=myPassword");
byte[] byteArray = Encoding.UTF8.GetBytes(postData.ToString());
postStream.Write(byteArray, 0, postData.Length);
postStream.Close();
myRequest.BeginGetResponse(new AsyncCallback(GetResponsetStreamCallback), myRequest);
}
void GetResponsetStreamCallback(IAsyncResult callbackResult)
{
HttpWebRequest request = (HttpWebRequest)callbackResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult);
using (StreamReader httpWebStreamReader = new StreamReader(response.GetResponseStream()))
{
string result = httpWebStreamReader.ReadToEnd();
//For debug: show results
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
// something do
});
}
}

I had just a quick look: https://www.facebook.com/login.php 's input fields are named "email" and "pass" (not "password").
Untested: Change
postData.Append("&password=myPassword");
to
postData.Append("&pass=myPassword");
Even if this works, I doubt that you get much further with whatever you intend to do. I recommend using one of the Facebook SDKs.

Related

Xamarin.Android - How to get JSON from website

I want to get JSON data from Site
Nothing shows up about it and Xamarin and I tried these 3 from youtube and it didn't work for me
public void ValidateNumber()
{
string URL = "http://android-householdinventory-api.epizy.com/ValidateNumber.php?";
WebClient client = new WebClient();
Uri uri = new Uri(URL + "number=10");
client.DownloadDataAsync(uri);
client.DownloadDataCompleted += Client_DownloadDataCompleted;
}
private void Client_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
{
//throw new NotImplementedException();
string json = Encoding.UTF8.GetString(e.Result);
System.Console.WriteLine(json);
}
public async void Validationv2()
{
using (var client = new HttpClient())
{
var uri = "http://android-householdinventory-api.epizy.com/ValidateNumber.php?number=100";
var Result = await client.GetStringAsync(uri);
System.Console.WriteLine(Result);
}
}
public void Validationv3()
{
WebClient wclient = new WebClient();
string a = wclient.DownloadString("http://android-householdinventory-api.epizy.com/ValidateNumber.php?number=100");
System.Console.WriteLine(a);
}
All Results to this:
<html><body><script type="text/javascript" src="/aes.js" ></script><script>function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f<d.length;f++)e+=(16>d[f]?"0":"")+d[f].toString(16);return e.toLowerCase()}var a=toNumbers("f655ba9d09a112d4968c63579db590b4"),b=toNumbers("98344c2eee86c3994890592585b49f80"),c=toNumbers("304feeb55638873348a9f20961a94049");document.cookie="__test="+toHex(slowAES.decrypt(c,2,a,b))+"; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/"; location.href="http://android-householdinventory-api.epizy.com/ValidateNumber.php?number=10&i=1";</script><noscript>This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support</noscript></body></html>
How to fix this?
I'm new to c# and Xamarin
Your API server is returning HTML response for this "http://android-householdinventory-api.epizy.com/ValidateNumber.php?number=100" end point that's why it is showing HTML in response. You will have to correct the api response on server side.
try this! working example
private async void btn_Login_Clicked(object sender, EventArgs e)
{
List<LoginDetails> UserDetails = await _services.LoginAsync(string username, string password)
}
public async Task<List<LoginDetails>> LoginAsync(string username, string password)
{
List<LoginDetails> UserList;
using (var client = new HttpClient())
{
LoginDetails Ld = new LoginDetails();
Ld.UserName = username;
Ld.Password = password;
string url = "";
//HttpClient client = new HttpClient();
string jsonData = JsonConvert.SerializeObject(Ld);
StringContent content = new StringContent(jsonData, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync(url, content);
string result = await response.Content.ReadAsStringAsync();
UserList = JsonConvert.DeserializeObject<List<LoginDetails>>(result);
//loginDetails = new ObservableCollection<LoginDetails>(UserList);
}
return UserList;
}
I was hosting on InfinityFree and it has aes.js so it may be causing that result.
This helped me in getting the solution
Setting Authorization Header of HttpClient
ByetHost server passing html values "Checking your browser" with JSON String
[I added this before client.GetAsync]
client.DefaultRequestHeaders.Add("Cookie", "__test=<COOKIE_CONTENT>; expires=<COOKIE_EXPIRATION>; path=/");

Handle httpWebRequest response

I've never been good in httpWebRequest. Always preferred WebClient but... desperate time, desperate measures.
private static void GetResponseCallback(IAsyncResult asynchronousResult)
{
try
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
// End the operation
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
Stream streamResponse = response.GetResponseStream();
StreamReader streamRead = new StreamReader(streamResponse);
string responseString = streamRead.ReadToEnd();
// Close the stream object
streamResponse.Close();
streamRead.Close();
// Release the HttpWebResponse
response.Close();
//allDone.Set();
}
catch (WebException exception)
{
}
}
I can see (when I put breakpoint next) that responseString is beautiul JSON but I can't print it out (MessageBox etc) as my app will break.
Could you tell me how to handle that?
Cheers
Added magic
Dispatcher.BeginInvoke(() => { MessageBox.Show("OK"); });
And worked like a charm :)
Try this one
using System.Net;
public void sendRequest()
{
WebRequest webRequest;
webRequest = WebRequest.Create(XXXXXXXXXX);
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.BeginGetRequestStream(newAsyncCallback(GetRequestStreamCallback), webRequest);
}
public void GetRequestStreamCallback(IAsyncResult asynchronousResult)
{
webRequest = (HttpWebRequest)asynchronousResult.AsyncState;
Stream postStream = webRequest.EndGetRequestStream(asynchronousResult);
string postData = "Test";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
postStream.Write(byteArray, 0, byteArray.Length);
postStream.Close();
webRequest.BeginGetResponse(new AsyncCallback(GetResponseCallback), webRequest);
}
public void GetResponseCallback(IAsyncResult asynchronousResult)
{
try
{
HttpWebRequest webRequest = (HttpWebRequest)asynchronousResult.AsyncState;
HttpWebResponse response;
response = (HttpWebResponse)webRequest.EndGetResponse(asynchronousResult);
Stream streamResponse = response.GetResponseStream();
StreamReader streamReader = new StreamReader(streamResponse);
var Response = streamReader.ReadToEnd();
streamResponse.Close();
streamReader.Close();
response.Close();
if (Response == "")
{
//show some error msg to the user
}
else
{
//Your response will be available in "Response"
}
}
catch (WebException)
{
//error
}
}
here the XXXXXXXX means your url with data which is sent to the server.

web service call in windows phone 8

I have a webservice written in java. I called from iPhone application but do not know how to call form windows phone. Web service have three parameter username, password and application id. I want to call through HttpWebRequest and receive response. How I can I do this ?
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>
-<SOAP-ENV:Body>
-<doLogin xmlns="http://login.mss.uks.com">
-<loginid xsi:type="xsd:string">abc</loginid>
-<password xsi:type="xsd:string">pqrs</password>
-<app_id xsi:type="xsd:int">2</app_id>
</doLogin>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Thanks in advance.
If you have a proper web service sitting somewhere, you can use Visual Studio to generate wrapper code to access the web service. Check out this link to find how.
I've been struggling with this topic these days too. Here is my situation and how I solved this problem:
Problem
I've created a Web service using PHP with NuSOAP, and now I have to create a Windows Phone 8 App that consumes the Web service to do some stuff.
Solution
I going explain my solution using en example.
Here is the Web service:
<?php
require_once 'lib/nusoap.php';
function test()
{
return "Hello World!";
}
$server = new soap_server();
$server->configureWSDL("MyService", "urn:MyService");
// IMPORTANT: Avoid some ProtocolException
$server->soap_defencoding = 'utf-8';
$server->register('test',
array(),
array('greeting' => 'xsd:string'),
'Service',
false,
'rpc',
'literal', // IMPORTANT: 'encoded' isn't compatible with Silverlight
'A simple hello world'
);
if (isset($HTTP_RAW_POST_DATA)) {
$server->service($HTTP_RAW_POST_DATA);
} else {
$server->service("php://input");
}
?>
Now the client App in Windows Phone:
Create a new project.
Create a TextBox with name 'testText' and a Button with name 'testButton'.
Add a service reference
Solution Explorer -> MyProjectName -> Add Service Reference.
NOTE: If the Web service is mounted in your local computer, don't use 'localhost' as the name of the server, use your IP. In WP 8, 'localhost' refers to the device itself, not your computer. More info.
With this, Visual Studio will create automatically all the needed classes to use the Web service.
Add some action to the button:
private void testButton_Click(object sender, RoutedEventArgs e)
{
var client = new ServiceReference.MyServicePortTypeClient();
client.testCompleted += client_testCompleted;
client.testAsync();
}
private void client_testCompleted(object sender, ServiceReference.testCompletedEventArgs e)
{
testText.Text = e.Result;
}
Here is the result:
I hope this be useful.
Hope this will help you.
private void Button_Click_1(object sender, RoutedEventArgs e)
{
// Create a new HttpWebRequest object.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.xxx.com/webservicelogin/webservice.asmx/ReadTotalOutstandingInvoice");
request.ContentType = "application/x-www-form-urlencoded";
request.UserAgent = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Touch)";
request.CookieContainer = cookie;
// Set the Method property to 'POST' to post data to the URI.
request.Method = "POST";
// start the asynchronous operation
request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);
}
private void GetRequestStreamCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
// End the operation
Stream postStream = request.EndGetRequestStream(asynchronousResult);
//postData value
string postData = "xxxxxxxxxx";
// Convert the string into a byte array.
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
// Write to the request stream.
postStream.Write(byteArray, 0, postData.Length);
postStream.Close();
// Start the asynchronous operation to get the response
request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
}
private void GetResponseCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
// End the operation
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
Stream streamResponse = response.GetResponseStream();
StreamReader streamRead = new StreamReader(streamResponse);
string read = streamRead.ReadToEnd();
//respond from httpRequest
TextBox.Text = read;
// Close the stream object
streamResponse.Close();
streamRead.Close();
response.Close();
}
Finally I got my perfect answer. By using the below code I solve my problem using HttpWebRequest.
string url = "http://urlname";
HttpWebRequest request = WebRequest.CreateHttp(new Uri(url)) as HttpWebRequest;
request.AllowReadStreamBuffering = true;
string strsoaprequestbody = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
"<soap-env:envelope xmlns:soap-env=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:soap-enc=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/xmlschema-instance\" xmlns:xsd=\"http://www.w3.org/2001/xmlschema\" soap-env:encodingstyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n" +
"<soap-env:body>\n" +
"<dologin xmlns=\"http://login.mss.uks.com\">\n" +
"<username xsi:type=\"xsd:string\">userID</username>\n" +
"<password xsi:type=\"xsd:string\">password</password>\n" +
"<app_id xsi:type=\"xsd:int\">2</app_id>\n" +
"</dologin>" +
"</soap-env:body>\n" +
"</soap-env:envelope>\n";
request.ContentType = "application/x-www-form-urlencoded";
request.UserAgent = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Touch)";
request.Headers["SOAPAction"] = "http://schemas.xmlsoap.org/soap/encoding/";
// Set the Method property to 'POST' to post data to the URI.
request.Method = "POST";
request.ContentLength = strsoaprequestbody.Length;
// start the asynchronous operation
request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);
}
private static void GetRequestStreamCallback(IAsyncResult asynchronousResult)
{
Debug.WriteLine("GetRequestStreamCallback method called....");
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
// End the operation
Stream postStream = request.EndGetRequestStream(asynchronousResult);
string postData = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
"<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n" +
"<SOAP-ENV:Body>\n" +
"<doLogin xmlns=\"http://login.mss.uks.com\">\n" +
"<username xsi:type=\"xsd:string\">userID</username>\n" +
"<password xsi:type=\"xsd:string\">password</password>\n" +
"<app_id xsi:type=\"xsd:int\">2</app_id>\n" +
"</doLogin>" +
"</SOAP-ENV:Body>\n" +
"</SOAP-ENV:Envelope>\n";
// Convert the string into a byte array.
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
// Write to the request stream.
postStream.Write(byteArray, 0, postData.Length);
postStream.Close();
// Start the asynchronous operation to get the response
request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
}
private static void GetResponseCallback(IAsyncResult asynchronousResult)
{
Debug.WriteLine("GetResponseCallback method called....");
try
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
// End the operation
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
Stream streamResponse = response.GetResponseStream();
StreamReader streamRead = new StreamReader(streamResponse);
string responseString = streamRead.ReadToEnd();
//display the web response
Debug.WriteLine("Response String : " + responseString);
// Close the stream object
streamResponse.Close();
streamRead.Close();
// Release the HttpWebResponse
response.Close();
}
catch (WebException ex)
{
using (StreamReader reader = new StreamReader(ex.Response.GetResponseStream()))
{
Debug.WriteLine("Exception output : " + ex);
}
}
}

NullReferenceException during navigation from MainPage.xaml.cs to another xaml

My application takes username and password and on clinking the hyperlinkbutton, these values are sent to the server and hence server returns something like PASS:ClientID. I wish to navigate to SecondPage.xaml (from MainPage.xaml.cs) only if the responseString contains PASS.
Here is my code:
namespace aquila1
{
public partial class MainPage : PhoneApplicationPage
{
static string username;
static string password;
static string rs;
static NavigationService ns = new NavigationService();
// Constructor
public MainPage()
{
InitializeComponent();
}
private static ManualResetEvent allDone = new ManualResetEvent(true);
private void HyperlinkButton_Click_1(object sender, RoutedEventArgs e)
{
username = textbox1.Text;
password = textbox2.Text;
System.Diagnostics.Debug.WriteLine(username);
System.Diagnostics.Debug.WriteLine(password);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://60.243.245.181/fms_tracking/php/mobile_login.php?username=" + username + "&password=" + password);
request.ContentType = "application/x-www-form-urlencoded";
// Set the Method property to 'POST' to post data to the URI.
request.Method = "POST";
// start the asynchronous operation
request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);
// Keep the main thread from continuing while the asynchronous
// operation completes. A real world application
// could do something useful such as updating its user interface.
allDone.WaitOne();
}
private static void GetRequestStreamCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
// End the operation
Stream postStream = request.EndGetRequestStream(asynchronousResult);
// Console.WriteLine("Please enter the input data to be posted:");
string postData = username + "+" + password;
System.Diagnostics.Debug.WriteLine(postData);
// Convert the string into a byte array.
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
// Write to the request stream.
postStream.Write(byteArray, 0, postData.Length);
postStream.Close();
// Start the asynchronous operation to get the response
request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
}
private static void GetResponseCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
// End the operation
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
Stream streamResponse = response.GetResponseStream();
StreamReader streamRead = new StreamReader(streamResponse);
string responseString = streamRead.ReadToEnd();
rs = responseString;
System.Diagnostics.Debug.WriteLine(responseString);
System.Diagnostics.Debug.WriteLine("#####");
System.Diagnostics.Debug.WriteLine(rs);
// Close the stream object
streamResponse.Close();
streamRead.Close();
// Release the HttpWebResponse
response.Close();
move2();
allDone.Set();
}
private static void move2()
{
string[] rs1 = rs.Split(':');
if ((rs1[0].Trim()).Equals("PASS"))
{
ns.Navigate(new Uri("/SecondPage.xaml", UriKind.Relative));
}
else
{
MessageBox.Show(rs);
}
}
}
}
On running the code, i always get NullReferenceException .
Plz help me find the error and suggest corrections.
Thanks in advance
You're most likely getting the error because the NavigationService cannot find the resource /SecondPage.xaml. Is SecondPage located at the root of your project?
This can also be caused by trying to navigate before the target resource is loaded (for example, by navigating inside a page's constructor), but that doesn't immediately appear to be your problem.
This answer suggests that this problem can occur after changing namespaces or assembly names. It states that cleaning the project, ensuring all bin and obj folders are empty, then recompiling will fix it. However, its reference link is dead.

Send and Rcived Image from Json webservice error: NotFound

I have create a jSON web service to save profile data with image. my service work properly but when send data to service HttpWebRequest return "The remote server returned an error: NotFound."
My code is this
void SendPost()
{
string webServiceAddress = #"http://localhost:51018/AMFDecember/WebService.asmx";
string methodName = "Register";
string url = string.Format("{0}/{1}", webServiceAddress, methodName);
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallbackx), webRequest);
}
void GetRequestStreamCallbackx(IAsyncResult asynchronousResult)
{
HttpWebRequest webRequest = (HttpWebRequest)asynchronousResult.AsyncState;
// End the stream request operation
Stream postStream = webRequest.EndGetRequestStream(asynchronousResult);
StreamReader streamReader = new StreamReader(postStream);
string Response = streamReader.ReadToEnd();
string img="";
try
{
string img = Convert.ToBase64String(imageBytes);
}
catch { }
// Create the post data
string postData = "";
// <emailID>string</emailID>
//<pwd>string</pwd>
//<name>string</name>
//<img>base64Binary</img>
postData = "emailID=pr#pr.pr&pwd=1234&name=test&img=" + Convert.ToBase64String(imageBytes) + "";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
// Add the post data to the web request
try
{
postStream.Write(byteArray, 0, byteArray.Length);
}
catch { }
postStream.Close();
// Start the web request
webRequest.BeginGetResponse(new AsyncCallback(GetResponseCallback), webRequest);
}
void GetResponseCallback(IAsyncResult asynchronousResult)
{
try
{
HttpWebRequest webRequest = (HttpWebRequest)asynchronousResult.AsyncState;
HttpWebResponse response;
// End the get response operation
response = (HttpWebResponse)webRequest.EndGetResponse(asynchronousResult);
Stream streamResponse = response.GetResponseStream();
StreamReader streamReader = new StreamReader(streamResponse);
string Response = streamReader.ReadToEnd();
streamResponse.Close();
streamReader.Close();
response.Close();
}
catch (WebException e)
{
// Error treatment
// ...
}
}
I think your problem might be "http://localhost" - this means the service should be on localhost - i.e. within your phone?
Maybe try using the network ip address of your PC instead - you might need to use full IIS or IISExpress to host your service for this.