php如何获取通过CURL或file_get_contents抓取者的IP地址

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php如何获取通过CURL或file_get_contents抓取者的IP地址相关的知识,希望对你有一定的参考价值。

为了避免接口泄漏,急需这样的屏蔽功能,或者有更好的招,求大神!

百度搜一下防止采集方面的知识,CURL或file_get_contents可以模拟用户行为,获取ip跟普通用户ip其实是一样的,关键是怎么去区别他们,这就需要在客户端做手脚,一般都用js来在客户端做手脚来区别。追问

那怎么获取抓取者的IP,这个$_SERVER['REMOTE_ADDR']貌似不对

追答

你可以把$_SERVER这个数组打印出来不就知道了吗

参考技术A curl里面可以伪造ip地址,伪造来源.
我建议你就根据访问频次来判断是机器访问还是人为访问.

如何在curl php中发送推送通知时获取注册ID

基本上......这里有两个文件,一个是curlphp脚本,另一个是angular1 js文件。

在js文件中,当管理员用户点击“发送通知”时,会触发一个事件,以便通过函数调用curl来发送消息。

该功能看起来像这样

    $scope.notify = function(title, content, ¿¿ userId ??){

    $.ajax({
        url: 'app/backend/src/curl-service.php',
        type: 'POST',
        data: {
            userId: 'the problem is here', 
            title: title, 
            message: content
        },
        success: function(data) {
            console.log('time to use curl service');
        },
        error: function(){
            console.log('Error! you can't use curl service');
        }
    });

    };

正如您所看到的,我使用ajax传递一些数据来填充将由此curl-service.php文件推送的通知内容

<?php
// Incluimos el api asignada al app
define('API_ACCESS_KEY', 'AIzaSyAJvT_Tx7vwZzViWkwUcQHdhx2osTiSXHA');

$registrationIds = array($_POST['userId']);
$title = array($_POST['title']);
$message = array($_POST['message']);

// preparamos los array
$msg = array
(
    'title'     => $title,
    'message'   => $message,
    'sound'     => default,
);
$fields = array
(
    'registration_ids'  => $registrationIds,
    'data'          => $msg
);

$headers = array
(
    'Content-Type: application/json',
    'Authorization: key=' . API_ACCESS_KEY
);

//iniciamos el servicio conectando con la url
$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send');
curl_setopt( $ch,CURLOPT_POST, true );
curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );
$result = curl_exec($ch);
curl_close($ch);
echo $result;

//ejecutamos el servicio
$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

//verificamos posibles errores y se genera la respuesta 
if ($err) {
    echo "Se ha producido el siguiente error:" . $err;
} else {
    echo $response;
}
?> 

我真正需要知道的是,我如何获得注册ID,以便我也可以在我的php文件中使用它

答案

你在做错了就是这里的代码:

$registrationIds = array($_POST['userId']);
$title = array($_POST['title']);
$message = array($_POST['message']);

// preparamos los array
$msg = array
(
    'title'     => $title,
    'message'   => $message,
    'sound'     => default,
);
$fields = array
(
    'registration_ids'  => $registrationIds,
    'data'          => $msg
)

您正在从POST数据创建数组,然后在之后使用字符串作为字符串,如果您将第一位更改为:

$registrationIds = $_POST['userId'];
$title = $_POST['title'];
$message = $_POST['message'];

或者更好的安全性:

$registrationIds = filter_input(INPUT_POST, 'userId', FILTER_SANITIZE_STRING);
$title = filter_input(INPUT_POST, 'title', FILTER_SANITIZE_STRING);
$message = filter_input(INPUT_POST, 'message', FILTER_SANITIZE_STRING);

你应该好好去

以上是关于php如何获取通过CURL或file_get_contents抓取者的IP地址的主要内容,如果未能解决你的问题,请参考以下文章

php 通过curl传递的json数据如何获取

如何在php中获取curl请求的请求头信息及相应头信息

如何通过php的curl模拟ajax请求,获取其返回值

php curl 302问题

如何通过 PHP 使用 curl 上传文件 [关闭]

PHP 通过 id 从跨度中获取文本/值并将其放入具有 cURL 的外部站点的变量中