NewDev
NewDev

Reputation: 47

adding an Interface

My main Program.cs is as follows:

using System;
using System.Collections.Generic;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.IO;
using System.Threading.Tasks;

namespace HTTPrequestApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var lstWebSites = new List<string>
            {
                "www.amazon.com",
                "www.ebay.com",
                "www.att.com",
                "www.verizon.com",
                "www.sprint.com",
                "www.centurylink.com",
                "www.yahoo.com"
            };
            string filename = @"RequestLog.txt";
            {
                using (var writer = new StreamWriter(filename, true))
                {
                    foreach (string website in lstWebSites)
                    {
                        for (var i = 0; i < 4; i++)
                        {
                            MyWebRequest request = new MyWebRequest();
                            request.Request();
                        }
                    }
                }
            }
        }
    }
}

Then I have a class, and this is where the errors are.

The GetList() error - 'HTTPrequestApp.Program' does not contain a definition for 'GetList'

The client2 error - The name 'client2' does not exist in the current content

MyWebRequest.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Threading.Tasks;

namespace HTTPrequestApp
{
    public class MyWebRequest : HTTPrequestApp.IWebRequest
    {
        public void Request()
        {
            List<string> lstWebSites = Program.GetList();
            using (var client = new TcpClient(lstWebSites[1], 80))
            {
                using (NetworkStream stream = client2.GetStream())
                using (StreamWriter writer = new StreamWriter(stream))
                using (StreamReader reader2 = new StreamReader(stream))
                {
                    writer.AutoFlush = true;
                    writer.WriteLine("GET / HTTP/1.1");
                    writer.WriteLine("HOST: {0}:80", lstWebSites[1]);
                    writer.WriteLine("Connection: Close");
                    writer.WriteLine();
                    writer.WriteLine();

                    string theresponse = reader2.ReadToEnd();
                    Console.WriteLine(theresponse);
                }
            }
        }
    }
}

Finally, I have an Interface. Is this done correctly?

If I am doing something incorrectly please help me, how should I fix it?

IWebRequest.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HTTPrequestApp
{
    interface IWebRequest
    {
        void Request();
    }
}

What I have to do is: send HTTP request to get the initial page and get back the HTTP response. Save it into the .cvs file. Check that it is a 200 response code and time how long it took to retrieve the response. I have to get the response 4 times from each of those websites in my list. Please help me.

Upvotes: 0

Views: 86

Answers (2)

Todd Sprang
Todd Sprang

Reputation: 2909

Here's a full example of what I mean. Keep adding all the websites you want to lstWebSites, and instead of dumping the HTML results to the console, you can write them to a file.

var lstWebSites = new List<string>
        {
            "https://www.stackoverflow.com",
            "https://www.google.com"
        };
foreach (string website in lstWebSites)
{
    var request = WebRequest.Create(website);
    request.Credentials = CredentialCache.DefaultCredentials;
    ((HttpWebRequest)request).UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";   // Lie
    var response = request.GetResponse();
    if (((HttpWebResponse)response).StatusCode == HttpStatusCode.OK)
    {
        var stream = response.GetResponseStream();
        var reader = new StreamReader(stream);
        Console.WriteLine(string.Format("***** {0} *****", website));
        Console.WriteLine(reader.ReadToEnd());  // Dump HTML response
    }
}

Upvotes: 0

user1672994
user1672994

Reputation: 10849

First about your errors :

  1. The provided code does not contain GetList method in Program class as the code shared contains the only main method which defines your websites.
  2. The line using (var client = new TcpClient(lstWebSites[1], 80)) creates client object instead of client2.

Another point, instead of writing to open TCPClient connection to read the response of website you can use HttpClient or WebRequest in-built classes to achieve your functionality.

Upvotes: 1

Related Questions