Domanda

Domanda sulla taglia

Sto usando l'applicazione Window Forms c # 3.5. Sto usando il codice indicato nella risposta accettata. e visualizzo l'errore di seguito

Il server remoto ha restituito un errore: (401) Non autorizzato.

Il codice di esempio per verificare il nome utente e la password sarà molto apprezzato

Fine della domanda sulla taglia


Ho un'applicazione con il seguente caso d'uso: quando l'utente inizia a utilizzare l'applicazione, inserisce il suo nome utente e la password. Quindi, in una fase molto successiva, l'applicazione potrebbe aggiornare il suo stato.

Attualmente sto usando Twitterizer, ma credo che la domanda esuli dall'ambito della libreria specifica che sto usando. Di seguito sono riportate le due righe di codice pertinenti:

Twitter twitter = new Twitter("username", "password", "source"); 
twitter.Status.Update("update");

La costruzione dell'oggetto Twitter non genera un'eccezione se il nome utente / la password non sono corretti. Questo probabilmente perché non viene inviato nulla a questo punto. D'altro canto, l'aggiornamento dello stato genera un'eccezione se il nome utente / la password non sono validi.

Il mio problema è che voglio convalidare il nome utente / la password al momento dell'input dell'utente, non quando provo a pubblicare l'aggiornamento.

Come posso convalidare il nome utente / la password senza pubblicare nulla (su Twitterizer o altro)?

È stato utile?

Soluzione

Dando una rapida occhiata all'API confirm_credentials come menzionato da peSHIr, ho scritto una piccola routine che sembra fare il trucco. È tardi, ma sono stato in grado di provarlo un paio di volte e sembra funzionare.

Nella mia funzione, sto solo ritornando vero se ricevo un HttpResponseCode.OK e falso se ricevo qualcos'altro o viene generata un'eccezione. Se a twitter non piace l'uid / password verrà generata un'eccezione con un errore 401 (non autorizzato.)

public bool CheckTwitterCredentials(string UserName, string Password)
{
    // Assume failure
    bool Result = false;

    // A try except block to handle any exceptions
    try {
        // Encode the user name with password
        string UserPass = Convert.ToBase64String(
            System.Text.Encoding.UTF8.GetBytes(UserName + ":" + Password));

        // Create our HTTP web request object
        HttpWebRequest Request = 
            (HttpWebRequest)WebRequest.Create("http://twitter.com/account/verify_credentials.xml");

        // Set up our request flags and submit type
        Request.Method = "GET";
        Request.ContentType = "application/x-www-form-urlencoded";

        // Add the authorization header with the encoded user name and password
        Request.Headers.Add("Authorization", "Basic " + UserPass);

        // Use an HttpWebResponse object to handle the response from Twitter
        HttpWebResponse WebResponse = (HttpWebResponse)Request.GetResponse();

        // Success if we get an OK response
        Result = WebResponse.StatusCode == HttpStatusCode.OK;
    } catch (Exception Ex) {
        System.Diagnostics.Debug.WriteLine("Error: " + Ex.Message);
    }

    // Return success/failure
    return Result;
}

Altri suggerimenti

Potresti provare a utilizzare la chiamata API account / confirm_credentials . Spero che la libreria API che usi già supporti questo. Twitter è ora noto per odiare davvero i programmatori di terze parti, quindi a meno che tu non abbia buone ragioni per fare qualcosa con Twitter, stai lontano ...

Ho usato altre librerie di Twitter ma nessuna di esse supporta la verifica della validità del nome utente e della password. Ciò potrebbe essere dovuto al fatto che l'API di Twitter non ha la possibilità di convalidare il nome utente e la password a meno che non proviamo a fare qualcosa che richiede l'autenticazione.

Una cosa che puoi fare è cercare di ottenere un elenco di amici o altri metodi che richiedono l'autenticazione.

L'API di Twitter non supporta nome utente / password da anni. Invece, hai OAuth, che consente all'utente di autorizzare l'applicazione ad agire per suo conto. Twitter ha un account / confirm_credentials che puoi utilizzare per verificare se l'utente che ha i token che hai ancora autorizza la tua app. Ecco un esempio di come è possibile chiamare questo endpoint con LINQ su Twitter:

        var accounts =
            from acct in twitterCtx.Account
            where acct.Type == AccountType.VerifyCredentials
            select acct;

Puoi visitare la Account / VerifyCredentials per maggiori dettagli :

come informato @ joe-mayo, devi passare a OAuth. twitter è scaduto v1 della sua API e hanno documentato che nel seguente URL https://dev.twitter.com/ docs / faq # 17750 .

Ecco una funzione che ho scritto che verificherà il nome utente e la password di Twitter in C #:

public bool isTwitterValid(string username, string password)
{
    try
    {
        string user = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(username + ":" + password));
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://twitter.com/statuses/verify.xml");

        request.Method = "POST";
        request.ServicePoint.Expect100Continue = false;
        request.Headers.Add("Authorization", "Basic " + user);
        request.ContentType = "application/x-www-form-urlencoded";
        WebResponse response = request.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream());
        string responseString = reader.ReadToEnd();
        reader.Close();
    }
    catch (Exception ex)
    {
        if (ex.Message.Contains("404")) { return true; }
    }
    return false;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top