문제

현상금 질문

C# 3.5 창 양식 응용 프로그램을 사용하고 있습니다. 허용 된 답변에 언급 된 코드를 사용하고 있습니다. 그리고 나는 오류 아래로 받고 있습니다

원격 서버는 오류를 반환했습니다. (401) 무단으로.

사용자 이름과 비밀번호를 확인하기위한 샘플 코드는 정말 감사합니다.

현상금 질문이 끝납니다


다음과 같은 사용 사례가있는 응용 프로그램이 있습니다. 사용자가 처음 응용 프로그램을 사용하기 시작하면 사용자 이름과 비밀번호를 입력합니다. 그런 다음 훨씬 후기 단계에서 응용 프로그램은 자신의 상태를 업데이트 할 수 있습니다.

현재 나는 Twitterizer를 사용하고 있지만 문제는 내가 사용하는 특정 라이브러리의 범위를 벗어난 것이라고 생각합니다. 다음은 두 가지 관련 코드 라인입니다.

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

사용자 이름/암호가 올바르지 않은 경우 트위터 객체의 구성은 예외를 던지지 않습니다. 이것은 아마도이 시점에서 아무것도 전송되지 않기 때문일 것입니다. 반면에 사용자 이름/암호가 유효하지 않은 경우 상태 업데이트는 예외를 던집니다.

내 문제는 업데이트를 게시 할 때가 아니라 사용자 입력 시점에서 사용자 이름/비밀번호를 검증하려는 것입니다.

아무것도 게시하지 않고 사용자 이름/비밀번호를 검증하려면 어떻게해야합니까?

도움이 되었습니까?

해결책

Peshir가 언급 한 바와 같이 verify_credentials api를 간단히 살펴보면 트릭을하는 것처럼 보이는 약간의 일상을 썼습니다. 늦었지만 몇 번 테스트 할 수 있었고 작동하는 것 같습니다.

내 기능에서, 나는 II가 httpresponsecode.ok를 받으면 진실을 돌려주고, 다른 것을 얻거나 예외가 발생하면 false. 트위터가 UID/비밀번호가 마음에 들지 않으면 예외는 401 오류 (승인되지 않음)로 던져집니다.

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;
}

다른 팁

API 호출을 사용하려고 시도 할 수 있습니다 계정/verify_credentials. 당신이 사용하는 API 라이브러리가 이미 이것을 지원하기를 바랍니다. 트위터는 지금 제 3 자 프로그래머를 싫어하는 것으로 유명합니다. 그래서 트위터로 무언가를 할 충분한 이유가 없다면, 그냥 멀리 떨어져 있습니다 ...

다른 트위터 라이브러리를 사용했지만 유효성을 위해 사용자 이름과 비밀번호를 확인하는 데 도움이되지 않았습니다. 인증이 필요한 작업을 시도하지 않는 한 Twitter API에는 사용자 이름과 비밀번호를 검증 할 수있는 시설이 없기 때문일 수 있습니다.

당신이 할 수있는 한 가지는 친구 목록이나 인증이 필요한 다른 방법을 얻는 것입니다.

Twitter API는 몇 년 동안 사용자 이름/비밀번호를 지원하지 않았습니다. 대신, 귀하는 OAUTH가 있는데, 이는 사용자가 신청서를 대신하여 행동하도록 승인 할 수 있습니다. 트위터는 있습니다 계정/verify_credentials 엔드 포인트 당신은 당신이 토큰 인 사용자가 여전히 앱을 승인하는지 여부를 확인하는 데 사용할 수 있습니다. 다음은 LINQ에서 트위터 로이 엔드 포인트를 호출하는 방법의 예입니다.

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

넌 방문 할 수있다 계정/확인 자세한 내용은 문서 :

@joe-mayo가 알다시피, 당신은 Oauth로 전환해야합니다. Twitter는 API의 V1을 만료했으며 다음과 같이 다음을 문서화했습니다. https://dev.twitter.com/docs/faq#17750.

다음은 C#에서 Twitter 사용자 이름과 비밀번호를 확인하는 기능입니다.

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;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top