You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向PHP API发HTTP请求时,能否获取Android应用ID等信息以验证所有权?

嘿,作为PHP开发者能折腾出这段Android代码已经很棒了!咱们来解决你要获取设备/应用信息和用户IP的需求,分几个部分来说:

解决获取应用/设备信息及用户IP的问题

1. 用户IP:PHP端直接就能拿到,不用改Android代码

用户的IP地址不需要在Android端做任何操作,在你的api.php里通过超全局变量就能直接获取:

// 获取基础IP
$user_ip = $_SERVER['REMOTE_ADDR'];
// 如果用户使用了代理,尝试获取真实IP
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $user_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}

把这段代码加到api.php里,就能拿到用户的IP地址了。

2. 应用ID、设备名称:需要在Android端获取后传递

这些信息属于设备/应用本地数据,得在Android代码里先获取到,再通过请求参数或者请求头发给你的API。下面给你两种简单的实现方式:

方式一:把信息作为请求参数传递

直接在你拼接请求参数的代码里添加新字段就行,不用改请求逻辑:

try {
    data = URLEncoder.encode("block_id", "UTF-8")+ "=" + URLEncoder.encode(adSetupID, "UTF-8");
    data += "&" + URLEncoder.encode("banner_size", "UTF-8") + "=" + URLEncoder.encode(adSetupBannerSize, "UTF-8");
    
    // 添加应用ID(就是你的应用包名,比如com.example.vasim.apisample)
    String appId = getApplicationContext().getPackageName();
    data += "&" + URLEncoder.encode("app_id", "UTF-8") + "=" + URLEncoder.encode(appId, "UTF-8");
    
    // 添加设备型号(比如Pixel 7、Mate 50这类)
    String deviceName = android.os.Build.MODEL;
    data += "&" + URLEncoder.encode("device_name", "UTF-8") + "=" + URLEncoder.encode(deviceName, "UTF-8");
    
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}

这样在PHP的$_REQUEST里就能直接拿到app_id和device_name这两个参数了。

方式二:通过请求头传递(更符合HTTP规范)

如果你不想把这些信息放在URL参数里,可以把它们加到请求的User-Agent头里。需要修改你用到的HTTPDataHandler类的GetHTTPData方法(假设你用的是HttpURLConnection):

public String GetHTTPData(String urlString) {
    String stream = null;
    try {
        URL url = new URL(urlString);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        
        // 构建自定义User-Agent,把应用ID和设备信息加进去
        String appId = getApplicationContext().getPackageName();
        String deviceName = android.os.Build.MODEL;
        // 格式可以自己定义,比如保留系统默认UA再追加自定义内容
        String customUserAgent = System.getProperty("http.agent") + " | AppID:" + appId + " | Device:" + deviceName;
        
        conn.setRequestProperty("User-Agent", customUserAgent);
        
        // 下面是原本的读取流逻辑,不用改
        // ...
    } catch (Exception e) {
        e.printStackTrace();
    }
    return stream;
}

然后在PHP端通过$_SERVER['HTTP_USER_AGENT']就能拿到这个包含自定义信息的User-Agent字符串,你可以自己拆分出需要的内容。

3. 小提醒

  • 上面用到的getPackageName()和Build.MODEL不需要额外申请权限,直接就能用,不用担心权限问题。
  • 如果你用的是OkHttp这类第三方网络库,设置请求头的方式会略有不同,但核心逻辑都是一样的:先获取本地信息,再传递给API。

内容的提问来源于stack exchange,提问作者Kliptu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:23:59