이 동작을 위해 IIS를 설정할 때 사용했던 “기본 인증 요청”을 모방하는 인증 요청을하려고합니다.
URL은 https://telematicoprova.agenziadogane.it/TelematicoServiziDiUtilitaWeb/ServiziDiUtilitaAutServlet?UC=22&SC=1&ST=2
(경고 : https!)입니다.
이 서버는 UNIX 및 Java에서 애플리케이션 서버로 실행 중입니다.
이 서버에 연결하는 데 사용하는 코드는 다음과 같습니다.
CookieContainer myContainer = new CookieContainer();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://telematicoprova.agenziadogane.it/TelematicoServiziDiUtilitaWeb/ServiziDiUtilitaAutServlet?UC=22&SC=1&ST=2");
request.Credentials = new NetworkCredential(xxx,xxx);
request.CookieContainer = myContainer;
request.PreAuthenticate = true;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
(이 사이트의 다른 게시물에서 이것을 복사했습니다). 그러나 서버 에서이 답변을받습니다.
기본 연결이 닫혔습니다. 전송 중에 예기치 않은 오류가 발생했습니다.
C #에 대한 지식이 제공해야 할 모든 가능한 작업을 시도했지만 아무것도 …
답변
인증 헤더를 직접 추가 할 수도 있습니다.
“Authorization”이라는 이름과 “Basic BASE64 ({USERNAME : PASSWORD})”값을 지정하십시오.
String username = "abc";
String password = "123";
String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
httpWebRequest.Headers.Add("Authorization", "Basic " + encoded);
편집하다
HTTP 기본 인증에 어떤 인코딩을 사용해야합니까?에 따라 인코딩을 UTF-8에서 ISO 8859-1로 전환했습니다 . 그리고 Jeroen의 의견.
답변
나는 마침내 그것을 얻었다!
string url = @"https://telematicoprova.agenziadogane.it/TelematicoServiziDiUtilitaWeb/ServiziDiUtilitaAutServlet?UC=22&SC=1&ST=2";
WebRequest request = WebRequest.Create(url);
request.Credentials = GetCredential();
request.PreAuthenticate = true;
그리고 이건 GetCredential()
private CredentialCache GetCredential()
{
string url = @"https://telematicoprova.agenziadogane.it/TelematicoServiziDiUtilitaWeb/ServiziDiUtilitaAutServlet?UC=22&SC=1&ST=2";
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
CredentialCache credentialCache = new CredentialCache();
credentialCache.Add(new System.Uri(url), "Basic", new NetworkCredential(ConfigurationManager.AppSettings["ead_username"], ConfigurationManager.AppSettings["ead_password"]));
return credentialCache;
}
예!
답변
WebClient
클래스 를 사용할 수 있으면 기본 인증 사용이 간단 해집니다.
var client = new WebClient {Credentials = new NetworkCredential("user_name", "password")};
var response = client.DownloadString("https://telematicoprova.agenziadogane.it/TelematicoServiziDiUtilitaWeb/ServiziDiUtilitaAutServlet?UC=22&SC=1&ST=2");
답변
이 시도:
System.Net.CredentialCache credentialCache = new System.Net.CredentialCache();
credentialCache.Add(
new System.Uri("http://www.yoururl.com/"),
"Basic",
new System.Net.NetworkCredential("username", "password")
);
...
...
httpWebRequest.Credentials = credentialCache;
답변
사용하는 사람들을 위해 RestSharp를 사용하는 경우, 그것은 실패 할 수 있습니다 SimpleAuthenticator를 (아마도 인해 ISO-8859-1 장면 뒤에 사용하지 않도록). 기본 인증 헤더를 명시 적으로 보내서 처리했습니다.
string username = "...";
string password = "...";
public IRestResponse GetResponse(string url, Method method = Method.GET)
{
string encoded = Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes($"{username}:{password}"));
var client = new RestClient(url);
var request = new RestRequest(method );
request.AddHeader("Authorization", $"Basic {encoded}");
IRestResponse response = client.Execute(request);
return response;
}
var response = GetResponse(url);
txtResult.Text = response.Content;
답변
다음 코드는 기본 인증 및 프록시가 구현 된 경우 json 응답을 해결하고 IIS 7.5 호스팅 문제를 해결합니다.
public string HttpGetByWebRequ(string uri, string username, string password)
{
//For Basic Authentication
string authInfo = username + ":" + password;
authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
//For Proxy
WebProxy proxy = new WebProxy("http://10.127.0.1:8080", true);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.Accept = "application/json; charset=utf-8";
request.Proxy = proxy;
request.Headers["Authorization"] = "Basic " + authInfo;
var response = (HttpWebResponse)request.GetResponse();
string strResponse = "";
using (var sr = new StreamReader(response.GetResponseStream()))
{
strResponse= sr.ReadToEnd();
}
return strResponse;
}
답변
사양은 “ISO-8859-1″또는 “undefined”로 읽을 수 있습니다. 당신의 선택. 많은 서버에서 ISO-8859-1을 사용하거나 사용하지 않는 것으로 알려져 있으며 다른 것을 보내면 실패합니다.
자세한 정보 및 상황 수정 제안은 http://greenbytes.de/tech/webdav/draft-reschke-basicauth-enc-latest.html을 참조하십시오.