简体   繁体   中英

Get JSON using OAuth 1.0 in vb.net

I have a sample code in php. This sample shows how to get some data in JSON format from a vendors site.

I am trying to write code in vb.net . I found some information https://www.codeproject.com/Articles/247336/Twitter-OAuth-authentication-using-Net and I wrote something in vb but when I try to run the app, I am getting a 502 error in browser.

The sample code is :

    <?php

$base_url = 'http://www.inart.com/';
$gr_url   = $base_url . 'api/rest/products/store/1';   //Products in Greek language
$en_url   = $base_url . 'api/rest/products/store/2';   //Products in English Language

$consumer_key    = 'CONSUMER_KEY';
$consumer_secret = 'CONSUMER_SECRET';
$token           = 'TOKEN';
$token_secret    = 'TOKEN_SECRET';

$parameters = array();

$headers    = array(
    'Content-Type' => 'application/json',
    'Accept'       => 'application/json'
);

$filters    = array(
    //Number of products per page (Default 10, Max 100)
    'limit' => 20,
    //Number of page to fetch
    'page'  => 1
); 
//For more filters visit: http://devdocs.magento.com/guides/m1x/api/rest/get_filters.html

$url = $gr_url . '?' . http_build_query($filters);

try {
    $oauthClient = new OAuth($consumer_key, $consumer_secret, OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_AUTHORIZATION);

    $oauthClient->setToken($token, $token_secret);

    $oauthClient->fetch($url, $parameters, OAUTH_HTTP_METHOD_GET, $headers);

    $json = $oauthClient->getLastResponse();

    echo $json;
} catch (Exception $e) {
    echo $e->getMessage();
}

The vb code is :

 Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim consumer_key = "3626311748bcf2072da2bd475fccfa3c"
    Dim consumer_secret = "0cbb0df8d840e22b96d4f80449e7e0b7"
    Dim token = "82c43c4cbff206316428860ee25da63d"
    Dim token_secret = "986d1996d22ccffa51dc960c041d4b74"
    Dim oauth_version = "1.0"
    Dim oauth_signature_method = "HMAC-SHA1"
    Dim base_url = "http://dev.inart.gr/api/rest/products/store/1"

    Dim baseFormat = "oauth_consumer_key={0}&oauth_signature_method={1}" + "&oauth_token={2}&oauth_version={3}"

    Dim baseString = String.Format(baseFormat, consumer_key, oauth_signature_method, token, oauth_version)

    baseString = String.Concat("POST&", Uri.EscapeDataString(base_url), "&", Uri.EscapeDataString(baseString))

    Dim compositeKey = String.Concat(Uri.EscapeDataString(consumer_secret), "&", Uri.EscapeDataString(token_secret))

    Dim oauth_signature As String
    Using hasher As New HMACSHA1(ASCIIEncoding.ASCII.GetBytes(compositeKey))
        oauth_signature = Convert.ToBase64String(hasher.ComputeHash(ASCIIEncoding.ASCII.GetBytes(baseString)))
    End Using

    Dim headerFormat = "OAuth oauth_signature_method=""{0}"", " + "oauth_consumer_key=""{1}"", " + "oauth_token=""{2}"", oauth_signature=""{3}"", " + "oauth_version=""{4}"""

    Dim authHeader = String.Format(headerFormat, Uri.EscapeDataString(oauth_signature_method), Uri.EscapeDataString(consumer_key), Uri.EscapeDataString(token),
    Uri.EscapeDataString(oauth_signature), Uri.EscapeDataString(oauth_version))

    Dim request As HttpWebRequest = DirectCast(WebRequest.Create(base_url), HttpWebRequest)
    request.Headers.Add("Authorization", authHeader)
    request.Method = "POST"
    request.ContentType = "application/json"
    request.Accept = "application/json"
    Dim response As WebResponse = request.GetResponse()
    MsgBox(response.ToString)
End Sub

The error is in line 39:Dim response As WebResponse = request.GetResponse() as browser says. Thanks for any help. Sorry for my bad english.

Finally I found the solution

Dim oauth_token = "8e269b44b2d7d73eb0b46112af5xxxxx"
Dim oauth_token_secret = "80da1edadcba1e66e47d2e20f07xxxxx"
Dim oauth_consumer_key = "3626311748bcf2072da2bd475fcxxxxx"
Dim oauth_consumer_secret = "0cbb0df8d840e22b96d4f80449exxxxx"

Dim oauth_version = "1.0"
Dim oauth_signature_method = "HMAC-SHA1"
Dim oauth_nonce = Convert.ToBase64String(New ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString()))
Dim timeSpan = DateTime.UtcNow - New DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc)
Dim oauth_timestamp = Convert.ToInt64(timeSpan.TotalSeconds).ToString()
Dim resource_url = "http://www.inart.com/api/rest/products/store/1"

Dim baseFormat = "oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}" + "&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}"

Dim baseString = String.Format(baseFormat, oauth_consumer_key, oauth_nonce, oauth_signature_method, oauth_timestamp, oauth_token, oauth_version)

baseString = String.Concat("GET&", Uri.EscapeDataString(resource_url), "&", Uri.EscapeDataString(baseString))

Dim compositeKey = String.Concat(Uri.EscapeDataString(oauth_consumer_secret), "&", Uri.EscapeDataString(oauth_token_secret))

Dim oauth_signature As String
Using hasher As New HMACSHA1(ASCIIEncoding.ASCII.GetBytes(compositeKey))
    oauth_signature = Convert.ToBase64String(hasher.ComputeHash(ASCIIEncoding.ASCII.GetBytes(baseString)))
End Using

Dim headerFormat = "OAuth oauth_nonce=""{0}"", oauth_signature_method=""{1}"", " + "oauth_timestamp=""{2}"", oauth_consumer_key=""{3}"", " + "oauth_token=""{4}"", oauth_signature=""{5}"", " + "oauth_version=""{6}"""

Dim authHeader = String.Format(headerFormat, Uri.EscapeDataString(oauth_nonce), Uri.EscapeDataString(oauth_signature_method), Uri.EscapeDataString(oauth_timestamp), Uri.EscapeDataString(oauth_consumer_key), Uri.EscapeDataString(oauth_token), Uri.EscapeDataString(oauth_signature), Uri.EscapeDataString(oauth_version))

ServicePointManager.Expect100Continue = False

Dim request As HttpWebRequest = DirectCast(WebRequest.Create(resource_url), HttpWebRequest)
request.Headers.Add("Authorization", authHeader)
request.Method = "GET"
request.ContentType = "application/json"
request.Accept = "application/json"
Try
    Dim response As WebResponse = request.GetResponse()
    Dim datastream As Stream = response.GetResponseStream
    Dim reader As StreamReader = New StreamReader(datastream)
    Dim responsefromserver As String = reader.ReadToEnd
    If responsefromserver = Nothing Then
        TextBox1.Text = "No response from server"
    Else
        TextBox1.Text = responsefromserver.ToString
    End If
    reader.Close()
    response.Close()
Catch ex As Exception
    ' Add some error handling here
End Try

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM