Доступ к REST WebService в VB.NET - PullRequest
       26

Доступ к REST WebService в VB.NET

1 голос
/ 10 августа 2010

Я пытаюсь получить доступ к веб-службе REST, однако мой код не работает и продолжает выдавать ошибку HTTP 401

см. Этот пример экранной шапки из Wireshark исходного запроса ssl:

WireShark Screenshot

Это от вызова Curl на тот же веб-адрес с теми же деталями.Проблема заключается в том, что в моей версии VB.NET отсутствует часть «Расширение: имя_сервера» (и связанная с ней) часть пакета SSL. Я полагаю, что это приводит к тому, что сервер не отвечает с обменом ключами сервера в следующих пакетах пары.

Ниже приведен код VB.NET

    Dim webRequest As HttpWebRequest = DirectCast(System.Net.WebRequest.Create(UrlString), HttpWebRequest)
    webRequest.Method = "GET"
    webRequest.ContentType = "application/x-www-form-urlencoded"

    webRequest.Credentials = New NetworkCredential(username, password)

    Dim response As HttpWebResponse = DirectCast(webRequest.GetResponse(), HttpWebResponse)

Ошибка в последней строке (ошибка HTTP 401), проблема, похоже, не связана с моим прокси, и учетные данные пользователя верныдля сервера, так как этот запрос работает от Curl и wget.

Я уже пытался установить AuthenticationLevel, а также вручную установить заголовок Authorization, и PreAuthenticate, похоже, тоже не меняет эту проблему.

1 Ответ

1 голос
/ 12 августа 2010

Ответ заключался в том, что WebService не отвечал с действительным заголовком HTTP401 WWW-Authenticate, а просто возвращал код с кодом:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Error>
    <ErrorCode>NO_SUITABLE_AUTHENTICATION_METHOD</ErrorCode>
    <ErrorDescription>No suitable active authentication mechanism found to authorise request - authorise using supported mechanisms</ErrorDescription>
    <RequestID>gcqsrtvn</RequestID>
    <SystemTime>2010-08-12T09:14:21.831+10:00</SystemTime>
</Error>

Поэтому мне пришлось вручную добавить заголовок аутентификации, как показано здесь: http://devproj20.blogspot.com/2008/02/assigning-basic-authorization-http.html

Код:

Dim authBytes() As Byte = System.Text.Encoding.UTF8.GetBytes(String.Format("{0}:{1}", username, password).ToCharArray())
webRequest.Headers("Authorization") = "Basic " + Convert.ToBase64String(authBytes)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...