Запрещено на HTTPWebrequest - PullRequest
0 голосов
/ 09 апреля 2020

Моя цель - установить элемент на etsy как Неактивный.

Я делаю запрос через POSTMAN:

PUT : https://openapi.etsy.com/v2/listings/756101864?listing_id=756101864&state=inactive

Я делаю авторизацию с oAuth

enter image description here

Точка: все работает потрясающе.

Теперь мне нужно, чтобы этот запрос был сделан из vb. net

Вот мой код

Public Sub END_ITEM_ETSY(SKU As String)


    Information("Ending item on etsy : " & SKU, 0)

    Dim listingID As String = 756101864
    Dim oauth_token = "xxxxxxxxxxxx"
    Dim oauth_token_secret = "xxx"
    Dim oauth_consumer_key = "xxxxxxx"
    Dim oauth_consumer_secret = "xxxx"

    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 = "https://openapi.etsy.com/v2/listings/" & listingID & "?listing_id=" & listingID & "&state=inactive"

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

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

    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 = "PUT"
    request.ContentType = "application/json"
    request.Accept = "application/json"
    request.ContentLength = 0
    request.UseDefaultCredentials = True
    request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials

    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
            Information("ERROR NO RESPONSE ", 2)
        Else
            Information("Completed " & listingID & " " & responsefromserver, 0)

        End If
        reader.Close()
        response.Close()
    Catch ex As Exception
        Information("Error on fetching results for etsy item " & ex.Message, 2)
    End Try

End Sub

Исключение, которое мне возвращается:

{"Удаленный сервер вернул ошибку: (403) Запрещено."}

Это не может быть на другом конце, потому что через почтальона такой же запрос проходит. Кто-нибудь знает, что я делаю неправильно, или, может быть, есть более простой способ получить запрос oAuth?

1 Ответ

0 голосов
/ 09 апреля 2020

Пожалуйста, убедитесь, что ваш код передает правильные параметры URL.

ИСПОЛЬЗУЙТЕ msgbox, чтобы проверить, отправляет ли правильный URL-адрес. Надеюсь, это поможет

...