意外响应代码 403(但在浏览器中工作正常)

2023-12-01

我试图从下面的 URL 获取 json 数据

但是当我运行应用程序时它显示

31029-31125 E/Volley: [228776] NetworkUtility.shouldRetryException: Unexpected response code 403 for https://newsapi.org/v2/everything?q=tesla&from=2021-02-23&sortBy=publishedAt&apiK 20ey=c9e4ed47388d413c8af23fc46a330f8e
31029-31125 E/Volley: [228776] NetworkUtility.shouldRetryException: Unexpected response code 403 for https://newsapi.org/v2/everything?q=tesla&from=2021-02-23&sortBy=publishedAt&apiK 20ey=c9e4ed47388d413c8af23fc46a330f8e

但是当我在 Chrome 浏览器中输入 URL 时,它会正常显示 json 数据,但我在我的应用程序中得到了同样的结果 这是我在 kotlin 中的代码

fun getNews(context: Context){
    var queue: RequestQueue = Volley.newRequestQueue(context)
    val url = "https://newsapi.org/v2/everything?q=tesla&from=2021-05-07&sortBy=publishedAt&apiKey=c9e4ed47388d413c8af23fc46a330f8e"
    val request = JsonObjectRequest(
        Request.Method.GET, url, null,
        { response ->
            var list: MutableList<newModel> = mutableListOf<newModel>()
            try {
                var rootArray: JSONArray = response.getJSONArray("articles")
                for(i in 0 until response.length()){
                    var dataObject: JSONObject = rootArray.get(i) as JSONObject
                    list.add(newModel(dataObject.getString("urlToImage") , dataObject.getString("title") , dataObject.getString("description") , dataObject.getString("url")))
                }

            } catch (e: Exception) {
                Toast.makeText(
                    context,
                    "error while parsing the jsonObject/array",
                    Toast.LENGTH_LONG
                ).show()
            }
            callBack.gotTheNewsData(list)
        }) { error ->
        Toast.makeText(context, "Error in responce", Toast.LENGTH_SHORT).show()
    }
    queue.add(request)
}

我遇到了同样的错误,我通过传递标头解决了它“Mozilla/5.0”到请求。

这可以在您的代码上以这种方式完成。

fun getNews(context: Context){
var queue: RequestQueue = Volley.newRequestQueue(context)
val url = "Your URL here"

val request = object: JsonObjectRequest(
    Request.Method.GET, url, null,
    { response ->
        var list: MutableList<newModel> = mutableListOf<newModel>()
        try {
            var rootArray: JSONArray = response.getJSONArray("articles")
            for(i in 0 until response.length()){
                var dataObject: JSONObject = rootArray.get(i) as JSONObject
                list.add(newModel(dataObject.getString("urlToImage") , dataObject.getString("title") , dataObject.getString("description") , dataObject.getString("url")))
            }

        } catch (e: Exception) {
            Toast.makeText(
                context,
                "error while parsing the jsonObject/array",
                Toast.LENGTH_LONG
            ).show()
        }
        callBack.gotTheNewsData(list)
    }) { error ->
    Toast.makeText(context, "Error in responce", Toast.LENGTH_SHORT).show()
}

// overriding function to add Headers.
{
    override fun getHeaders(): MutableMap<String, String> {
        val headers = HashMap<String, String>()
        headers["User-Agent"]="Mozilla/5.0"
        return headers
    }
}

queue.add(request)
}

重要的是要使用object在构造请求之前添加关键字,以便能够重写 getHeaders() 方法。

这个答案帮助我使用 kotlin 在 Volley 请求中添加自定义标头。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

意外响应代码 403(但在浏览器中工作正常) 的相关文章

  • 有没有办法有一个屏蔽数字输入字段?

    我正在 Android 上创建一个 HTML5 应用程序 对于这个特定场景 我们有一个用于信用卡安全代码的输入字段 我们希望强制输入字段仅包含数字并被屏蔽 我没有运气搜索这个特定的案例 从我自己研究 尝试中可以看出 这不能纯粹通过 HTML
  • 我应该使用什么事件在 Firebase Analytics 上发送“按钮按下”事件

    我发现最合适的是选择内容 https firebase google com docs reference android com google firebase analytics FirebaseAnalytics Event html
  • 如何知道哪个用户正在尝试登录?

    用户是使用电子邮件和密码创建的 这就是我进行注册的方式 mSignup setOnClickListener new View OnClickListener Override public void onClick View v mEma
  • 从当前位置出发的移动网络行车路线

    我正在构建一个网站的移动版本 试图通过一键式链接来启动 Google 地图 并提供从用户当前位置到企业的行车路线 我让它在 iPhone 上运行良好 但在 Android 上测试时 它会查看 Current 20Location 并尝试查找
  • 加载内容时在 ImageView 中使用“动画圆圈”

    我目前在我的应用程序中使用一个列表视图 可能需要一秒钟才能显示 我目前所做的是使用列表视图的 id android empty 属性来创建 正在加载 文本
  • XmlPullParser 异常 - 无法解决

    我有一个基本方法 ReadXML 从资产文件夹中读取 xml 文件 运行时不会引发任何异常 但在这个方法中 我调用了 doXML 方法 该方法尝试从 xml 文件中提取文本并将该文本设置到文本视图中 当 doXML 方法运行时 我不断收到以
  • Firebase 云消息传递 - 目标到 Firebase 控制台中不可见的单个设备

    我正在尝试向 android 中的单个设备发送通知 但是当我从 Firebase 控制台执行此操作时 它在 Firebase 新视图中不可见 谁能帮助我从哪里向单个设备发送通知 仔细尝试以下步骤 Tap 新通知 Fill up 通知标题 可
  • 像 Google Play 商店一样在垂直 RecyclerView 中动态不同图像水平 RecyclerView

    我一直在关注这个教程 http android pratap blogspot co za 2015 12 horizo ntal recyclerview in vertical html http android pratap blog
  • overridePendingTransition 显示第二个活动的速度太快

    我有 2 个活动 我想在两个活动之间创建一个动画过渡 以便两个活动的视图向上滑动 就好像第二个活动正在向上推动第一个活动一样 在我的第一个活动中我使用 Intent iSecondActivity new Intent FirstActiv
  • 没有 GUI 的 Android Activity

    我创建了一个仅从链接启动的活动 使用意图过滤器 我不希望此活动有 GUI 我只希望它启动服务并在栏中放置通知 我尝试将链接的意图过滤器放入我的服务中 但这不起作用 有没有更好的方法可以响应意图过滤器 或者我可以让我的活动没有 GUI 吗 抱
  • 在 Android Studio 中运行重建项目后会发生什么?

    该文件http www jetbrains com idea help rebuilding project html search reb http www jetbrains com idea help rebuilding proje
  • 如何使用Multipart将图像上传到php服务器

    我一直很头疼 如何将图像上传到服务器 这对我来说是新任务 但对我来说很困惑 我在 stackoverflow 上搜索并用谷歌搜索 但我遇到了问题 我的意图是从 SD 卡上传照片并从相机拍照并上传到服务器 在ios中 这个任务已经完成 在io
  • 在 Android 模拟器中获取互联网连接

    我有一台带有wifi连接的台式电脑 我的IP地址是192 168 12 95 网关是192 168 10 10 但是我在android模拟器中没有获得互联网连接 也就是说我无法访问internate 我也尝试过 emulator avd w
  • Android - 带动画的可扩展 TextView

    我有一个TextView首先显示长文本的一小部分 用户可以按 查看更多 按钮来展开TextView并查看该文本的其余部分 进行测试 我可以通过简单地交换以下值来实现这一点TextView setMaxLines介于 4 之间 用于折叠 和
  • 安卓浮动键盘

    是否可以通过编程方式更改键盘的位置 我正在开发一个图腾应用程序 如果键盘停靠在底部 则很难使用 我尝试创建一个扩展 InputMethodService 的自定义键盘 并且我能够更改按键的布局 但我无法更改键盘的视图位置 快捷键 https
  • python 和 android 中通过 AES 算法加密和解密

    我有用于 AES 加密的 python 和 android 代码 当我在android中加密文本时 它在python上成功解密 但无法在android端解密 有人有想法吗 Python代码 import base64 import hash
  • 使用 LinearLayout 将按钮放在屏幕底部?

    我有以下代码 如何使 3 个按钮位于底部
  • 未捕获的引用错误:cordova 未定义

    这是我的 HelloPlugin js 文件 var HelloPlugin callNativeFunction function success fail resultType return cordova exec success f
  • 对于双核手机,availableProcessors() 返回 1

    我最近购买了一部 Moto Atrix 2 手机 当我尝试查看手机中的处理器规格时 Runtime getRuntime availableProcessors 返回 1 proc cpuinfo 也仅包含有关处理器 0 的信息 出于好奇
  • Android - 从渲染线程内结束活动

    下午好 我不熟悉 android 中的活动生命周期 并且一直在尽可能地阅读 但我不知道如何以良好的方式解决以下问题 我有一个使用 GLSurfaceView 的活动来在屏幕上绘制各种内容 在这个 GLSurfaceView 的渲染线程中 我

随机推荐