C# httpwebrequest basic authentication
C# httpwebrequest basic authentication
資料來源: https://stackoverflow.com/questions/4334521/httpwebrequest-using-basic-authentication
https://zh.wikipedia.org/zh-tw/ISO/IEC_8859-1
POSTMAIN 畫面紀錄
測試程式碼:
private void test_buf_Load(object sender, EventArgs e)
{
//c# httpwebrequest basic authentication
//https://stackoverflow.com/questions/4334521/httpwebrequest-using-basic-authentication
//https://zh.wikipedia.org/zh-tw/ISO/IEC_8859-1
String username = "VT-POS-2019-0000005";//terminal_sid
String password = "0252cdc0-eba7-11ec-b78c-018c3f1b4592";//api_token
String encoded = System.Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
String StrResult = HttpsFun.RESTfulAPI_get("/terminal/data", "Authorization", "Basic " + encoded);
}
函數庫/函式庫
public class HttpsFun
{
private static bool m_blnlogfile = true;
private static bool m_blnTestMode = true;
private static String m_StrDomain = "https://test.jashliao.eu/api";
public static void setDomainMode(bool blnTestMode=true)
{
m_blnTestMode=blnTestMode;
m_StrDomain = (m_blnTestMode) ? "https://test.jashliao.eu/api" : "https://cloud.jashliao.eu/api";
}
public static void setHeader(ref HttpWebRequest request,String StrHeaderName,String StrHeaderValue)//新增HTTP/HTTPS的Header參數
{
if((StrHeaderName.Length>0)&&(StrHeaderValue.Length>0))
{
request.Headers[StrHeaderName] = StrHeaderValue;
}
}
public static String RESTfulAPI_get(String path, String StrHeaderName = "", String StrHeaderValue = "")
{
//string url= "http://192.168.1.68:24410/syris/sydm/controller";
String mStrHeaderName = StrHeaderName;
String mStrHeaderValue = StrHeaderValue;
String StrData = "";
String url = m_StrDomain + path;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
setHeader(ref request, mStrHeaderName, mStrHeaderValue);
request.KeepAlive = false;
//---
//定義此req的緩存策略
//https://msdn.microsoft.com/zh-tw/library/system.net.webrequest.cachepolicy(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1
HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
request.CachePolicy = noCachePolicy;
//---定義此req的緩存策略
request.Method = "GET";//request.Method = "POST";
//request.ContentType = "application/x-www-form-urlencoded";
Thread.Sleep(100);
System.Net.ServicePointManager.DefaultConnectionLimit = 200;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string encoding = response.ContentEncoding;
if (encoding == null || encoding.Length < 1)
{
encoding = "UTF-8"; //預設編碼
}
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));
StrData = reader.ReadToEnd();
response.Close();
//---
//手動強制執行當呼叫完 CG API 的強制關閉連線補強措施
request.Abort();
response = null;
request = null;
GC.Collect();//手動記憶體回收
//---手動強制執行當呼叫完 CG API 的強制關閉連線補強措施
if (m_blnlogfile)
{
String StrLog = String.Format("RESTfulAPI_get ({0}): {1};{2}", url, "", StrData);
FileLib.logFile("HttpsNormal.log", StrLog);//FileLib.logFile(DateTime.Now.ToString("yyyyMMdd") + ".log", StrLog);
}
}
catch (Exception e)
{
StrData += e.Message;
if (m_blnlogfile)
{
String StrLog = String.Format("RESTfulAPI_getBody ({0}): {1};{2}", url, "", StrData);
FileLib.logFile("HttpsError.log", StrLog);
}
}
return StrData;
}
public static String RESTfulAPI_postBody(String path, String StrInput, String StrHeaderName="", String StrHeaderValue="")
{
String mStrHeaderName = StrHeaderName;
String mStrHeaderValue = StrHeaderValue;
String StrData = "";
String url = m_StrDomain + path;
HttpWebRequest request = null;
try
{
request = (HttpWebRequest)WebRequest.Create(url);
setHeader(ref request, mStrHeaderName, mStrHeaderValue);
request.KeepAlive = false;
//---
//定義此req的緩存策略
//https://msdn.microsoft.com/zh-tw/library/system.net.webrequest.cachepolicy(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1
HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
request.CachePolicy = noCachePolicy;
//---定義此req的緩存策略
request.Method = "POST";
//---
//request.ContentType = "application/x-www-form-urlencoded";//一般POST
request.ContentType = "application/json; charset=UTF-8";//POST to AJAX [is_ajax_request()]
//request.Accept = "application/json, text/javascript";//POST to AJAX [is_ajax_request()]
//request.UserAgent = "";//POST to AJAX [is_ajax_request()]
//request.Headers.Add("X-Requested-With", "XMLHttpRequest");//POST to AJAX [is_ajax_request()]
//---
//request.ContentLength = data1.Length;
//StreamWriter writer = new StreamWriter(request.GetRequestStream());//CS2PHPrestfulapi 傳送全部改為UTF8
//writer.Write(StrInput);
//writer.Flush();
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
streamWriter.Write(StrInput);
streamWriter.Flush();
}
Thread.Sleep(100);
System.Net.ServicePointManager.DefaultConnectionLimit = 200;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string encoding = response.ContentEncoding;
if (encoding == null || encoding.Length < 1)
{
encoding = "UTF-8"; //默认编码
}
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));
StrData = reader.ReadToEnd();
response.Close();
//---
//手動強制執行當呼叫完 CG API 的強制關閉連線補強措施
request.Abort();
response = null;
request = null;
GC.Collect();//手動記憶體回收
//---手動強制執行當呼叫完 CG API 的強制關閉連線補強措施
if (m_blnlogfile)
{
String StrLog = String.Format("RESTfulAPI_postBody ({0}): {1};{2}", url, StrInput, StrData);
FileLib.logFile("HttpsNormal.log", StrLog);//FileLib.logFile(DateTime.Now.ToString("yyyyMMdd") + ".log", StrLog);
}
}
catch (WebException e)
{
//httpwebrequest getresponse 400
//https://stackoverflow.com/questions/692342/net-httpwebrequest-getresponse-raises-exception-when-http-status-code-400-ba
using (WebResponse response = e.Response)
{
if(response != null)
{
HttpWebResponse httpResponse = (HttpWebResponse)response;
//Console.WriteLine("Error code: {0}", httpResponse.StatusCode);
using (Stream data = response.GetResponseStream())
using (var reader = new StreamReader(data))
{
StrData = reader.ReadToEnd();
}
}
else
{
StrData = "NULL";
}
}
if (m_blnlogfile)
{
String StrLog = String.Format("RESTfulAPI_postBody ({0}): {1};{2}", url, StrInput, StrData);
FileLib.logFile("HttpsError.log", StrLog);
}
}
return StrData;
}
public static string GetPublicIPAddress(int mode=0)
{
//https://www.c-sharpcorner.com/blogs/how-to-get-public-ip-address-using-c-sharp1
//https://www.codegrepper.com/code-examples/csharp/c%23+get+public+ip+address
//https://codingvision.net/c-how-to-get-external-ip-address
String address = "";
switch(mode)
{
case 0:
using (WebClient client = new WebClient())
{
address = client.DownloadString("https://api.ipify.org/");
}
break;
case 2:
address = new WebClient().DownloadString(@"http://icanhazip.com").Trim();
break;
case 1:
WebRequest request = WebRequest.Create("http://checkip.dyndns.org/");
using (WebResponse response = request.GetResponse())
using (StreamReader stream = new StreamReader(response.GetResponseStream()))
{
address = stream.ReadToEnd();
}
int first = address.IndexOf("Address: ") + 9;
int last = address.LastIndexOf("</body>");
address = address.Substring(first, last - first);
break;
}
return address;
}
}//HttpsFun
2 thoughts on “C# httpwebrequest basic authentication”
HTTP Authentication
https://carsonwah.github.io/http-authentication.html
Basic: RFC 2617 (1999) -> RFC 7617 (2015)
Digest: RFC 2069 (1997) -> RFC 2617 (1999) -> RFC 7617 (2015)
OAuth 1.0 (Twitter, 2007)
OAuth 2.0 (2012)
Bearer (OAuth 2.0): RFC 6750 (2012)
JSON Web Tokens (JWT): RFC 7519 (2015)
php basic auth username password 範例
https://www.php.net/manual/en/features.http-auth.php
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
exit;
} else {
echo "Hello {$_SERVER['PHP_AUTH_USER']}.";
echo "You entered {$_SERVER['PHP_AUTH_PW']} as your password.";
}
?>