0

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

Tuna
  • 22
  • 4
  • Use `HttpClient` instead of `WebClient` : https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient?view=xamarinandroid-7.1 – SushiHangover Nov 02 '20 at 09:01
  • @SushiHangover I tried HttpClient but same results, 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); } } Am I doing it wrong? – Tuna Nov 02 '20 at 09:11

3 Answers3

1

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.

Jai Gupta
  • 1,374
  • 9
  • 8
0

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;

    }
0

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=/");

Tuna
  • 22
  • 4