Requête HTTP GET avec le nom d'utilisateur & Mot de passe
C'est ma première tentative de création d'un console app
qui peut faire une HTTP GET
demande et imprimer la réponse à la console
.
Jusqu'à présent, le code fonctionne, mais seulement pour URIs
qui ne nécessitent pas de username/password
.
Mon but ultime est d'utiliser un cloud/hosting API
qui accepte HTTP GET
demandes déclenche pour prendre certaines mesures. En tant que tel, je dois utiliser un username/password
pour cela.
using System;
using System.Net;
using System.IO;
namespace HttpTestProject {
class Program {
static void Main(string[] args) {
Uri uri = new Uri("http://www.google.com");
string username = "asdf";
string password = "asdf";
NetworkCredential cred = new NetworkCredential(username, password);
CredentialCache cache = new CredentialCache();
cache.Add(uri, "Basic", cred);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream resStream = response.GetResponseStream();
StreamReader reader = new StreamReader(resStream);
string text = reader.ReadToEnd();
Console.WriteLine(text);
Console.ReadLine();
}
}
}
- Ne devrait pas les informations d'identification réseau être envoyé par la POSTE?
- authentification http de base est indépendante de la méthode de la requête. Je me demande ce que la question est bien (ne pas les informations d'identification attribué à la
Credentials
propriété de la demande?) - L'envoi d'informations d'identification réseau via un GET au lieu de POST n'est pas moins sûr, est-il?
- Je ne sais pas pourquoi ce commentaire a eu 4 upvotes, authentification http de Base est envoyé sous la forme d'un en-tête HTTP, indépendamment de savoir si vous êtes en utilisant GET ou POST. Les deux sont tout aussi sécurisé (pas sûr du tout, sauf si vous utilisez https).
- Si vous traitez avec 401 -> stackoverflow.com/questions/2038808/...
Vous devez vous connecter pour publier un commentaire.
Si vous devez ajouter l'authentification de base à votre demande sans attendre pour un défi, vous pouvez ajouter l'en-tête manuellement:
request.Credentials = new NetworkCredential(username, password);
j'ai été en utilisant ce code récemment pour quelque chose d'autre, et un autre programmeur fait cette recommandation à moi. Les deux approches de travail pour moi.Credentials
, la demande sera adressée sans eux, puis the.NET HTTP client va attendre la réponse HTTP 401 code contenant unWWW-Authenticate
en-tête HTTP (ce que j'ai appelé "challenge"). Puis il va répéter la demande, y compris les informations d'identification. C'est le bon moyen, selon la RFC, mais si le serveur ne fonctionne pas de cette façon, vous devez aveuglément envoyer leAuthorization
en-tête manuellement comme je l'ai suggéré.