¿El servidor utiliza la autenticación básica de HTTP o algún otro tipo? Si usa HTTP básico, puede configurar la propiedad Credentials
en la solicitud web en una credencial que contenga el nombre de usuario y la contraseña correctos, y establecer la propiedad PreAuthenticate
en verdadero.
He aquí un ejemplo (que es no probado, a fin de utilizarlo como una guía general):
var uri = new Uri("https://somesite.com/something");
var request = WebRequest.Create(uri) as HttpWebRequest;
request.Credentials = new NetworkCredential("myUserName","myPassword");
request.PreAuthenticate = true;
var response = request.GetResponse();
Nota: En mi experiencia haciendo esto, hay un cierto comportamiento extraño en el marco .NET. Uno pensaría que debería hacer lo que dice el código, pero lo que realmente hace esto: solicitud
- Enviar al servidor con las credenciales
- servidor responde con 401
- volver a enviar la solicitud con las credenciales que le dio es
- El servidor acepta solicitud.
No tengo idea de por qué haría esto, ya que parece estar roto, por lo que tal vez fue una peculiaridad de mi máquina y tal vez no te pase a ti.
Si su aplicación no es sensible al rendimiento, y sus solicitudes no son POSTS de datos grandes, probablemente no lo note, pero para evitarlo, tuve que crear manualmente el encabezado de autenticación HTTP básico y configurarlo HttpWebRequest
manualmente manipulando la colección Headers
.
Creo que el comportamiento que describes es el mismo comportamiento que wget en * nix muestra. Se intenta una vez y falla y luego envía las credenciales y tiene éxito. – Stephan
Creo que este es un tipo de secuencia de solicitud de desafío que forma parte de la especificación http. – MGOwen