2015-10-03 11 views
5

मैं वाहक टोकन प्राप्त करने के लिए कोशिश कर रहा हूँ वाहक टोकन प्राप्त करें:HttpClient का उपयोग कर

public override async Task<string> Post(string path, HttpContent content) { 


    var encodedConsumerKey = System.Uri.EscapeDataString("1111111111111"); 
    var encodedConsumerKeySecret = System.Uri.EscapeDataString("2222222222222"); 
    var encodedPair = Base64Encode(String.Format("{0}:{1}", encodedConsumerKey, encodedConsumerKeySecret)); 

    HttpRequestMessage request = new HttpRequestMessage{ 
             Method  = HttpMethod.Post, 
             RequestUri = new Uri("https://api.twitter.com/oauth2/token"), 
             Content  = new StringContent("grant_type=client_credentials") 
            }; 
    request.Headers.TryAddWithoutValidation("Authorization", String.Format("BASIC {0}", encodedPair)); 
    request.Headers.TryAddWithoutValidation("Content-Type", "application/x-www-form-urlencoded"); 


    var result = await HttpClient.SendAsync(request); 
    return result.Content.ReadAsStringAsync().Result; 
} 

private static string Base64Encode(string plainText) { 
    var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText); 
    return System.Convert.ToBase64String(plainTextBytes); 
} 

यह मैं निम्न त्रुटि 403 दे रहा है 'निषिद्ध'। किसी भी सुझाव की सराहना की जाएगी।

+0

आप "बुनियादी" वाहक प्रमाणीकरण के साथ 'OAuth2' प्रमाणीकरण लागू कर रहे हैं:

यहाँ पूरा तरीका बस में मामला किसी को भी यह आवश्यकता होगी है? यकीन नहीं है कि उड़ने जा रहा है। –

+0

यकीन है कि यह उड़ जाएगा। इस तरह ट्विटर का [ऐप-केवल प्रमाणीकरण] (https://dev.twitter.com/oauth/application-only) काम करता है। –

+0

सही, मैं ऐप-केवल प्रमाणीकरण का उपयोग कर रहा हूं। हालांकि, यह मुझे 403 त्रुटि को धक्का दे रहा है। –

उत्तर

7

मैं यह काम करने में सक्षम था। मैंने उपरोक्त कोड में कुछ चीजें बदल दीं। सबसे पहले ContentType

requestToken.Content.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded") {CharSet = "UTF-8"}; 

दूसरा सेट कर रहा है एक बहुत छोटे से विस्तार मैं याद किया, Authorization शीर्षक में Basic स्ट्रिंग के मामले को कम है।

public async Task<string> GetAPI(string apiPath) 
{ 

var baseUri = new Uri("https://api.twitter.com/"); 
var encodedConsumerKey = HttpUtility.UrlEncode("111111111111"); 
var encodedConsumerKeySecret = HttpUtility.UrlEncode("222222222222"); 
var encodedPair = Base64Encode(String.Format("{0}:{1}", encodedConsumerKey, encodedConsumerKeySecret)); 

var requestToken = new HttpRequestMessage 
{ 
    Method = HttpMethod.Post, 
    RequestUri = new Uri(baseUri, "oauth2/token"), 
    Content = new StringContent("grant_type=client_credentials") 
}; 

requestToken.Content.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded") { CharSet = "UTF-8" }; 
requestToken.Headers.TryAddWithoutValidation("Authorization", String.Format("Basic {0}", encodedPair)); 

var bearerResult = await HttpClient.SendAsync(requestToken); 
var bearerData = await bearerResult.Content.ReadAsStringAsync(); 
var bearerToken = JObject.Parse(bearerData)["access_token"].ToString(); 

var requestData = new HttpRequestMessage 
{ 
    Method = HttpMethod.Get, 
    RequestUri = new Uri(baseUri, apiPath), 
}; 
requestData.Headers.TryAddWithoutValidation("Authorization", String.Format("Bearer {0}", bearerToken)); 

var results = await HttpClient.SendAsync(requestData); 
return await results.Content.ReadAsStringAsync(); 

} 
+0

मुझे लगता है कि 'बेसिक' के मामले को कम करने के बारे में टिप्पणी वास्तव में नमूना कोड में नहीं की जाती है? – Maslow

+0

यह स्ट्रिंगकंटेंट में अतिरिक्त पैरामीटर के साथ भी किया जा सकता है: नया स्ट्रिंगकंटेंट (पोस्टक्वायर, एन्कोडिंग.यूटीएफ 8, "एप्लिकेशन/एक्स-www-form-urlencoded") –

+0

*** OAuth1 *** या *** OAuth2 *** संस्करण? – Kiquenet

संबंधित मुद्दे