# HttpWebRequest를 사용한 방식

보통 C# Inner 클래스를 만들고 불러오는 방식

 

1. Class 파일 추가 ( Visual Studio 에서 추가하기! )

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

using System.IO;
using System.Net;
using System.Net.Http;

namespace GUI_TEST01
{
    internal class HttpRequest
    {
        // HttpRequest를 실행하는 함수
        public static string GetRequest(String url, HttpMethod method, object param = null)
        {
            // 파라미터가 있을 경우, 익명 클래스로 만들기 때문에 Reflection을 이용해서 데이터를 가져온다.
            if (param != null)
            {
                StringBuilder parameter = new StringBuilder();
                // 파라미터키=파라미터값&파라미터키=파라미터값&파라미터키=파라미터값 의 형태로 만든다.
                foreach (var p in param.GetType().GetProperties())
                {
                    if (parameter.Length > 0)
                    {
                        parameter.Append("&");
                    }
                    parameter.AppendFormat("{0}={1}", p.Name, p.GetValue(param));
                }
                param = parameter.ToString();
            }
            else
            {
                param = "";
            }
            // Http method가 GET 방식의 경우 파라미터를 url 주소 뒤에 붙인다.
            if (HttpMethod.Get.Equals(method))
            {
                if (url.Contains("?"))
                {
                    url += "&" + param;
                }
                else
                {
                    url += "?" + param;
                }
            }

            // url를 통해 HttpWebRequest 클래스를 생성한다.
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            // 해더의 메소드를 정의한다.
            request.Method = method.ToString();
            // 해더의 ContentType를 정의한다.
            request.ContentType = "application/x-www-form-urlencoded";
            // request에 프로퍼티로 정의되지 않는 해더의 경우는 Indexer의 형식으로 정의할 수 있다.
            // 프로퍼티로 정의된 해더의 경우, 아래와 같이 정의할 경우 에러가 발생한다.
            request.Headers["Upgrade-Insecure-Requests"] = "1";

            // Http method가 POST 방식의 경우, 해더 아래에
            if (HttpMethod.Post.Equals(method))
            {
                byte[] byteArray = Encoding.UTF8.GetBytes((string)param);
                request.ContentLength = byteArray.Length;
                using (Stream dataStream = request.GetRequestStream())
                {
                    dataStream.Write(byteArray, 0, byteArray.Length);
                }
            }

            // Http 프로토콜을 접속해서 response 받기
            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {
                // 프로토콜의 반환 코드를 받을 수 있다. (200이면 정상이다.)
                Console.WriteLine((int)response.StatusCode);
                // 스트림으로 반환 결과값을 받는다.
                using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                {
                    return reader.ReadToEnd();
                }
            }
        }
    }
}

2. 버튼 클릭 시 값이 찍힌다.

private void metroButton1_Click(object sender, EventArgs e)
        {
            // this.RunCmd("python C:/Users/Administrator/source/repos/GUI_TEST01/PyScripts/Calculator.py");
            // this.RunCmd("docker exec -it alibi /root/anaconda3/bin/python3 main.py");
            // localhost에 Get 방식으로 접속해서 파라미터는 param=test이다.
            // http://localhost/index.php?param=test
            //String html = GetRequest("http://localhost:5000", HttpMethod.Get, new { param = "test" });
            //Console.WriteLine(html);

            //// localhost에 Post 방식으로 접속해서 파라미터는 param=test이다.
            //html = GetRequest("http://localhost:5000", HttpMethod.Post, new { param = "test" });
            //Console.WriteLine(html);

            //Console.WriteLine("Press any key...");
            //Console.ReadKey();

            String html = HttpRequest.GetRequest("http://localhost:5000", HttpMethod.Get, new { param = "test" });
            Console.WriteLine(html);
        }

 

 

 


# Selenium 방식

1.

도구 - Nuget 패키지 관리자 - 솔루션용 Nuget 패키지 관리

=> Selenium.WebDriver 설치

 

2. namespace 추가

//Selenium Library
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;

3. 

추가 작성 예정

'프로그래밍 언어 > C#' 카테고리의 다른 글

[C#] Winform 모든 포커스 해제  (0) 2022.09.05
[C#] Yes No 버튼 | 확인 버튼  (0) 2022.08.29
[C#] 명령 프롬프트 실행  (0) 2022.08.26
[C#] C#에서 Python 실행하기  (0) 2022.08.26
[C#] .ini 파일 읽기 쓰기  (0) 2022.08.22
[C#] GUI 연습 | MetroFramework 적용  (0) 2022.08.19
[C#] C# 연습  (0) 2022.06.21

+ Recent posts