# 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 |