android - 如何修改来自 Android 应用程序的 HTTP 请求 header ?

标签 android http

有没有办法让我捕获从我的应用程序发送的所有 HTTP 请求,并在发送之前修改它们的 header ?我想修改它们的 referer header ,以便将请求发送到的服务器认为它们来自网络浏览器而不是移动应用程序。谢谢!

更新:为了给您更多背景信息,我打算移植一个 chrome 扩展 Instant Music通过使用 Phonegap 进入 Android 应用程序。一些在 PC 上允许的 YouTube 视频在移动设备上是不允许的,我怀疑这是因为嵌入在 Android 应用程序中的 youtube 播放器没有引用 header 。我正在尝试找到解决此问题的方法,以便我也可以在移动设备上播放此类视频。

最佳答案

Youtube 检测用户浏览器的 Agent String,其中包含有关浏览器的信息。如果您要使用 WebView 来显示 youtube 视频,则可以设置该 WebViewAgent String。 您可以在互联网上找到不同浏览器的代理字符串。我在这里找到了一些:Agent Strings .

以下是我如何通过模拟 Firefox 浏览器播放 Bob Marley 不允许在手机上播放的歌曲:

package com.my.myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

    public class MyActivity extends Activity {

        private WebView mWebView ;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            mWebView  = new WebView(this);
            // Enable javascript
            mWebView.getSettings().setJavaScriptEnabled(true);
            // Impersonate Mozzila browser
            mWebView.getSettings().setUserAgentString("Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:21.0.0) Gecko/20121011 Firefox/21.0.0");
            final Activity activity = this;

            mWebView.setWebViewClient(new WebViewClient() {
                public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                    Toast.makeText(activity, description, Toast.LENGTH_SHORT).show();
                }
            });

            mWebView .loadUrl("http://youtube.com/watch?v=x59kS2AOrGM");
            setContentView(mWebView);
        }

    }

编辑:

您还需要通过将此行添加到您的 AndroidManifest.xml 来为您的 Activity 授予使用互联网的权限:

<uses-permission android:name="android.permission.INTERNET" /> 

关于android - 如何修改来自 Android 应用程序的 HTTP 请求 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24365714/

相关文章:

android - 在 BeagleBone Black 上构建 rowboat-android

java - 如何在微调器中设置 ID 和值

ios - 用于验证图片下载的 HTTP 响应头内容长度

http - 是否可以使用 GZIP 对多个文件进行 HTTP 内容编码?

android - Android 中 ListView 底部的按钮

java - 如何维护应用程序的付费和免费版本

android - 通过蓝牙从 Android 在 Zebra 打印机上打印数据

php - 如何注销发回页面以验证我是否要使用 php 和 curl 注销的网站

http - 在主干中放置一个自定义的 http header

asp.net - 为什么使用 HTTP 动词?