我正在尝试通过一个身份验证请求来模仿我们习惯在为此行为设置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#的知识必须提供给我,但没有...
我正在尝试使用HTTPWebRequest访问REST服务,并且在传递凭据时遇到问题,请参阅下面的代码.我读过它NetworkCredential不支持SSL,而且我正在访问HTTPS站点.有没有人知道类似于NetworkCredential支持SSL的类?
Uri requestUri = null;
Uri.TryCreate("https://mywebserver/webpage", UriKind.Absolute, out requestUri);
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(requestUri);
NetworkCredential nc = new NetworkCredential("user", "password");
request.Credentials = nc;
request.Method = WebRequestMethods.Http.Get;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
我创建了RESTful webservice(WCF),我检查每个请求的凭据.我的一个客户是Android应用程序,服务器端的一切似乎都很棒.我收到请求,如果它有正确的标题 - 我处理它等.
现在我创建了使用此服务的客户端应用程序.这是我做GET的方式:
// Create the web request  
            var request = WebRequest.Create(Context.ServiceURL + uri) as HttpWebRequest;
            if (request != null)
            {
                request.ContentType = "application/json";
                // Add authentication to request  
                request.Credentials = new NetworkCredential(Context.UserName, Context.Password);
                // Get response  
                using (var response = request.GetResponse() as HttpWebResponse)
                {
                    // Get the response stream  
                    if (response != null)
                    {
                        var reader = new StreamReader(response.GetResponseStream());
                        // Console application output
                        var s = reader.ReadToEnd();
                        var serializer = new JavaScriptSerializer();
                        var returnValue = (T)serializer.Deserialize(s, typeof(T)); …我正在使用 HttpClient 调用 Web Api REST 端点,偶尔我会看到一个随机的 401 未授权状态。
这是我的 HttpClient 包装器,它是为可重用性目的而创建的。我已经修改了它以保持这篇文章的简单而不修改核心部分。
public class HttpHelper
{
        public const string JsonContentType = "application/json";
        public T PostAsJsonObject<T>(string uri, T t) where T : class
        {
            using (HttpResponseMessage response = PostJsonHttpRequest(uri, JsonContentType, t))
            {
                response.EnsureSuccessStatusCode();
                return response.Content.ReadAsAsync<T>().Result;
            }
        }
        private HttpResponseMessage PostJsonHttpRequest<T>(string uri, string contentType, T content) where T : class
        {
            if (String.IsNullOrEmpty(uri))
            {
                throw new ArgumentNullException("uri");
            }
            HttpResponseMessage response = CreateHttpClient(contentType).PostAsJsonAsync(uri, content).Result;
            return response;
        }
        private HttpClient CreateHttpClient(string contentType)
        {
           var …编辑:使用:
byte[] authBytes = System.Text.Encoding.UTF8.GetBytes(user + ":" + password);
wr.Headers["Authorization"] = "Basic " + Convert.ToBase64String(authBytes);
似乎工作正常.
我有一个与CMS通信的应用程序.我目前正在尝试让这个客户端能够使用"POST"方法将文本/ xml数据上传到CMS.
我可以通过使用curl完美地传递这个:
curl -u user:password -H "Content-Type:text/xml" -d "<element>myXML</element>" serverURL
但是,尝试在C#中使用HttpWebRequest我无法让服务器返回我想要的内容.所以我解雇了Wireshark并查看了实际传递的内容,它几乎完全相同,除了使用curl时我可以看到:
Authorization: Basic <a bunch of hex>=\r\n
Credentials: user:password
在HTTP标头字段中,在我的客户端的输出中,这些标头字段根本不存在.("凭据:"实际上并不是纯文本,它是"授权:"的子树 - 所以我不知道它从何处获取,但用户名和密码是正确的.)
我试图用来设置webrequest凭据的C#代码是这样的:
NetworkCredential myCred = new NetworkCredential(
                    user, password, serverURL);
CredentialCache myCache = new CredentialCache();
myCache.Add(new Uri(serverURL), "Basic", myCred);
HttpWebRequest wr = (HttpWebRequest) HttpWebRequest.Create(serverURL);
wr.Credentials = myCache;
我也试过像这样设置凭据(并且没有指定serverURL):
wr.Credentials = new NetworkCredential(user,password,serverURL);
但这仍然没有让它出现在wireshark中.有没有人知道如果:
A)授权信息实际上应该在HTTP标头中,以便工作,以及
B)如果是 - 那么我如何让C#把它放进去?我似乎只能使用默认凭据找到合适的示例,这不适用于我正在做的事情.
提前致谢.