Nano Hash - криптовалюты, майнинг, программирование

Есть ли способ запросить сервер на порту, отличном от 80, с помощью класса WebRequest?

Я пытаюсь получить токен носителя с сервера идентификации, используя класс WebRequest, потому что программа должна работать с .NET 2.0, а порт, откуда я получаю токен, — 10000.

Я попытался создать WebRequest, например

  • адрес личности: 10000/getToken
  • http://identityURL:10000/getToken

но ни один не работает. Первый возвращает ошибку «Неизвестный префикс URL», а второй — ошибку «400 Bad Request».

Есть ли другой способ получить токен в .NET 2.0?

Заранее большое спасибо за вашу помощь.

-Саймон

Редактировать:

Using wc As New WebClient()
      Dim postData As String = "grant_type=" + sTokenGrantType + "&username=" + sIdentityServerClientName + "&password=" + sIdentityServerClientSecret + "&scope=Api"
      Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
      Dim responseArray As Byte()

      wc.Headers.Add(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded")
      wc.Headers.Add(HttpRequestHeader.ContentLength, byteArray.Length.ToString)
      wc.Headers.Add(HttpRequestHeader.UserAgent, "User-Agent: PostmanRuntime/7.15.0")

      wc.BaseAddress = sIdentityServerURL

      responseArray = wc.UploadData("/getToken", "POST", byteArray)

      MsgBox(responseArray)
End Using

Я попытался использовать класс WebClient, но это привело к следующей ошибке: «Во время запроса WebClient произошло исключение».

РЕШЕНО (см. ниже)


  • Вы можете создать WebRequest из Uri, а класс имеет свойство Port. 08.07.2019
  • Только что понял, что Port доступен только для чтения, поэтому значение в любом случае будет исходить из URL-адреса. 08.07.2019
  • Вы работаете с OAuth или OAuth2 для токена Bearer? 08.07.2019
  • К сожалению, я его не устанавливал, поэтому не знаю, но, насколько мне известно, мы используем OAuth2. 08.07.2019
  • Я сделал как OAuth, так и OAuth2 с VB.Net 2.0. Они оба ОЧЕНЬ разные. Номер порта обычно автоматически обрабатывается функцией WebRequest(). Примечание. OAuth2 — только https. Я могу помочь больше, если вы узнаете, какой из них вы используете. 08.07.2019
  • Хорошо, спасибо, я это узнаю. Тем временем я попробовал кое-что еще и добавил его в исходный вопрос. Было бы здорово, если бы вы могли взглянуть на него. 08.07.2019
  • @jmcilhinney Передавая исходный Uri в UriBuilder, вы можете установить свойство Port. Или любое другое значение, доступное только для чтения в классе Uri. 08.07.2019

Ответы:


1

Я искал в Интернете, и, похоже, работает следующее. Я еще не пробовал, но нашел следующую ссылку на код на нескольких сайтах.

Uri myUri = new Uri("http://{server}:{port}");
WebRequest.Create(Uri);

Кроме того, проверьте, помогает ли обратный вызов ServicePoint.BindIPEndPointDelegate. Образец кода :

public static IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount)
{
    Console.WriteLine("BindIPEndpoint called");
      return new IPEndPoint(IPAddress.Any,5000);

}

public static void Main()
{

    HttpWebRequest request = (HttpWebRequest) WebRequest.Create("http://MyServer");

    request.ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(BindIPEndPointCallback);

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();

}

Это взято из здесь. Попробуйте изменить номер порта в строке 3.

08.07.2019

2

Спасибо за вашу помощь, но я решил это сам, используя WebClient вместо WebRequest. Вот как я это сделал:

Код немного отличается от приведенного выше. Исключение, которое я получил с WebClient, произошло из-за проблемы с одним из установленных мной HTTP-заголовков.

Using wc As New WebClient()
      Dim postData As String = "grant_type=" + sTokenGrantType + "&client_id=" + sIdentityServerClientName + "&client_secret=" + sIdentityServerClientSecret + "&scope=Api"
      Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
      Dim responseArray As Byte()

      wc.Headers.Add(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded")

      wc.BaseAddress = sIdentityServerURL

      responseArray = wc.UploadData("/getToken", "POST", byteArray)
End Using
08.07.2019
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..