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

не может получить ответ от вызова API, он возвращает Запрещенную ошибку

У меня есть вызов API для отображения элемента поиска в recyclerview. Поэтому я использую модифицированные и kotlin-сопрограммы для вызова API. Но сетевой вызов возвращает запрещенную ошибку

{protocol=h2, code=403, message=, url=https://www.blibli.com/backend/search/products?&searchTerm=samsung&start=0&itemPerPage=24}

URL-адрес правильный, потому что я могу получить ответ, используя библиотеку volley, но мне нужно получить ответ от модификации.

Это класс интерфейса

интерфейс APIService {

@GET("products")
suspend fun getItems(@Query("searchTerm") item : String,
                     @Query("start") start : String,
                     @Query("itemPerPage") page : String) : Example

}

class SearchViewModel : ViewModel() {

    fun getItems() : LiveData<Example?> {

        System.out.println("========== activated")
        var response = liveData(Dispatchers.IO) {

            try {
                var items = Api.getRetrofit()?.getItems("samsung", "0","24")
                emit(items)
                System.out.println("========== retrofit $items")
            }catch (ex: Exception){}
            catch (ex: Throwable){}
            catch (ex: HttpRetryException){}
        }
        return response
    }
}
class MainActivity : AppCompatActivity() {

    lateinit var viewModel : SearchViewModel
    var adapter : SearchAdapter? = null

    var otherOffer : OtherOfferings? =null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_search)

        viewModel = ViewModelProviders.of(this).get(SearchViewModel::class.java)

        viewModel.getItems().observe(this, Observer {

            System.out.println("========= ${it}")
        })

    }
}

Кто-нибудь, пожалуйста, помогите мне, я не знаю, что не так с моим кодом, тот же код работает с другими API.


  • У вас есть заголовки, которые вы отправляете? Требует ли сайт, на который вы переходите, какую-либо форму аутентификации или некоторый заголовок, который используется для целей аутентификации? 03.09.2019
  • нет, никаких заголовков и аутентификаций. 03.09.2019
  • Спасибо, еще один вопрос, где находится код, который создает экземпляр объекта клиента Retrofit? Похоже, что путь строится неправильно и пытается попасть по неправильно сформированному URL-адресу. Можете ли вы опубликовать код создания объекта клиента Retrofit + базовый URL-адрес, который вы используете в его конструкторе? 03.09.2019
  • я должен использовать пользовательский агент с произвольным именем (bliblandroid), поэтому добавил перехватчик, но он все еще не работает. Я никогда раньше не использовал пользовательский агент. 03.09.2019
  • 2 вещи, чтобы попробовать / сделать. Сначала измените BASE_URL на https://www.blibli.com/, а затем измените @GET("products") в своем интерфейсе на @GET("/backend/search/products"). Да, дополнительная косая черта сделана намеренно. Если это исправит, отлично, если нет, дайте мне знать, и есть еще одна идея, которую вы можете попробовать. 03.09.2019
  • Хорошо, я попробую, вы знаете, как установить заголовок пользовательского агента, прежде чем обращаться к API? 04.09.2019
  • Да, как вы упомянули, вы используете собственный перехватчик. Пример кода можно найти здесь — stackoverflow.com/a/27840834/2480714. 04.09.2019
  • Я изменил значение User-Agent в заголовках, а не в перехватчиках, теперь я могу получить ответ. 05.09.2019

Новые материалы

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

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

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

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

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

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

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