php的curl如何获取到重定向后的页面内容

一直在用php在写爬虫,好久没遇到过被爬的页面被重定向了。
在curl的时候 需要配置一个参数
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
这句加上可以允许curl获取到跳转后的网页内容,
默认是不获取自动跳转到的,加上这句就可以了,
又可以愉快的Spider了

chatgpt强势来袭

chatgpt无疑问是目前最火的人工智能话题,简单试用了下,确实比其他的国内的人工智障(天猫精灵,小爱,小度)好太多,主要得益于人工智能的训练模型和数据样本,算力的强劲提升。
这个里程碑式的产品,必将改变人们的生活。
从好的方面来看,太多了 ,chatpgt标志着,人工智能已经迈入了一个新的时代。
从不好的方面
1.确实可能会影响一部分人的就业
2.最大的担忧,就如周鸿祎所说,如果chatgpt等人工智能随着算力的提升和知识的自我学习,很快将超越人类,然后逐渐有了自我意识,可能会把人类视为低等生物,进而毁灭人类,有了意识,就不再是一个工具,而是一个新的生物。

php获取post参数的几种方式

PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型。

php获取post参数的几种方式

1、$_POST[‘paramName’] 只能接收Content-Type: application/x-www-form-urlencoded提交的数据…php会将http请求body相应数据会 填入到数组$_POST,填入到$_POST数组中的数据是进行urldecode()解析的结果。(其实,除了该Content-Type,还有 multipart/form-data表示数据是表单数据)

2、file_get_contents(“php://input”) 适用大多数类型的Content-type

php://input 允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。php://input 不能用于 enctype=”multipart/form-data”。

3、$GLOBALS[‘HTTP_RAW_POST_DATA’]; 总是产生 $HTTP_RAW_POST_DATA  变量包含有原始的 POST 数据。此变量仅在碰到未识别 MIME 类型的数据时产生。$HTTP_RAW_POST_DATA  对于 enctype=”multipart/form-data”  表单数据不可用。

如果post过来的数据不是PHP能够识别的,你可以用 $GLOBALS[‘HTTP_RAW_POST_DATA’]来接收,比如 text/xml 或者 soap 等等。需要设置php.ini中的always_populate_raw_post_data值为On,PHP才会总把POST数据填入变 量$http_raw_post_data。

1,Coentent-Type仅在取值为application/x-www-data-urlencoded和multipart/form- data两种情况下,PHP才会将http请求数据包中相应的数据填入全局变量$_POST
2,PHP不能识别的Content-Type类型的时候,会将http请求包中相应的数据填入变量$HTTP_RAW_POST_DATA
3, 只有Coentent-Type不为multipart/form-data的时候,PHP不会将http请求数据包中的相应数据填入php: //input,否则其它情况都会。填入的长度,由Coentent-Length指定。
4,只有Content-Type为application/x-www-data-urlencoded时,php://input数据才 跟$_POST数据相一致。
5,php://input数据总是跟$HTTP_RAW_POST_DATA相同,但是php://input 比$HTTP_RAW_POST_DATA更凑效,且不需要特殊设置php.ini
6,PHP会将PATH字段的query_path部分,填入全局变量$_GET。通常情况下,GET方法提交的http请求,body为空。

推荐一款免费开源的安全风险识别系统

目前安全形势日益严峻,很多中小公司在自身业务场景面临巨大的风险,比如在电商场景下,很多羊毛党团队对你的营销活动,如打折,秒杀,拼团等虎视眈眈,各种电话卡,各种群控手机,早已做好疯狂下单的准备。

在黑灰产已经规模化的背景下,很多中小公司根本没有安全团队,无法应对黑灰产的突袭。组建安全风控团队需要大量资金,也需要时间。

这里给大家安利一款风险识别的工具,免费开源

https://github.com/menglike/risk_indetified

描述:可以对[手机号]/[ip]/[邮箱]/[收货地址]进行风险识别

IP风险识别

IP风险识别产品适用于帮助用户发现账户被盗行为,可以运用到网站的登录、下单、付款、提现等业务流程中,通过传入识别所需信息,系统自动返回账户登录风险情况。客户可以根据返回的风险信息自行执行处置动作(如短信验证、身份证验证、人脸验证、锁定账户等)。

手机号风险识别

手机号风险识别产品适用于帮助用户发现在营销活动中出现的作弊、薅羊毛、套利等风险,可以运用到限时抽奖、免费拉新、优惠折扣、推广返利等类型活动中,通过传入识别所需信息,系统自动返回营销风险情况,用户可以将风险返回结果应用到营销资源差异化投放中(如打标、阻断、调整中奖/券概率等)。

邮箱画像

邮箱画像产品适用于帮助用户发现邮箱风险,可以运用到用户的注册、登录、修改信息等业务流程中,通过传入邮箱信息,系统自动返回邮箱风险情况。用户可以根据返回的风险标签个性化处理账户及账户行为(如打标、阻断、用户挑战等)。

地址评分

地址评分产品适用于帮助用户发现无效地址,可以运用到用户的注册、下单、修改信息等业务流程中,通过传入地址信息,系统自动返回地址风险情况。用户可以根据返回信息执行后续操作(如核实业务信息,降低处理优先级等)。

架构:该工具使用Golang+Amis进行开发


主要作用:识别用户常见属性的风险值


适用场景:电商活动,例如拉新,秒杀,促销等场景

部署方式:

  1. 直接下载源码,编译执行,go run main.go
  2. 启动默认端口为9999
  3. 访问页面 http://127.0.0.1:9999
  4. 目前单个ip每天的请求量是100次
  5. 如果需要更大的调用量,请联系wx:cqwanhl

页面预览:

搞懂了waf架构的原理

一般来说,waf会部署在一台服务器,举例ip为129.39.13.12,需要保护的域名为www.sss.com, waf的域名为 waf_0wxefsfadfa2312_test.sss.com,真实的主机ip为44.33.2.1 ,在Dns解析里面需要配置为:

www.sss.com -> cname-> waf_0wxefsfadfa2312_test.sss.com

然后在129.39.13.12 部署安装 nginx+lua的waf,需要在nginx配置一个反向代理

举例:

server{

server_name waf_0wxefsfadfa2312_test.sss.com;

location /{

proxy_pass www.sss.com;

}

}

然后129.39.13.12 需要知道 www.sss.com如何解析

这个地方就有很多的处理方式,通过网络策略来实现

或者最简单的方式,修改本机的hosts

这里就使用这种方法:修改 vi /etc/hosts

配置如下: www.sss.com 44.33.2.1 就可以了

当然 你需要在真实的服务器上 配置好nginx的虚拟主机,不然就gg了

其实原理还是比较简单的,waf所在主机就是一个代理,当浏览器请求经过代理时,会进行各种waf规则过滤,过滤完之后,会将请求转发到后端真实的服务器上。

自己开发的一个chrome插件

这个插件是跟安全相关的小插件,功能是输入ip地址,可以查看ip的归属地,风险值,标签。

功能很简单,主要是把chrome插件的开发方式走一遍,然后熟悉下用户与浏览器的交互流程,整个过程没有太难的地方,就是简单js,jquery语法,基本上没有用到样式,页面不怎么美观,不过无所谓了。

virtualenv 从一台主机迁移到另外一台主机

之前碰到过 将python的virtualenv从本机进行不同位置的迁移,但是现在来了个新需求,virtualenv需要从一台主机迁移至另外一台主机,该怎么做呢?

第一步,先打包环境

zip -r hello.zip hello_env

hello_env是环境的文件夹名称

第二步,打包python3的相关库

位置是在 /usr/lib64/python3.x

zip -r python3.x.zip python3.x

第三步,将两个包传送到目的主机哈桑

可以使用scp命令可以快速完成

scp python3.x.zip root@l92.168.10.2:/usr/lib64/

第四步,解压

unzip python3.x.zip 即可

之前在操作过程,没有将python3.x.zip迁移过来,导致pip 报错

not found modules logging.

not found modules contextlib

selenium-wire 比selenium更好使

最近在做项目的过程,需要获取到 请求头的csrftoken,这个参数是需要来防止csrf攻击的,然后页面请求是通过selenium去实现的,无法获取到实际请求里面的详细信息,比如content-type ,user-agent ,csrf-toke等封装在header里面的数据。

创建浏览器驱动也很简单,和selenium一样的

from seleniumwire import webdiver

driver = webdriver.Chrome()

driver.get(“http://www.baidu.com’)

for i in driver.requests:

print( i.headers[‘content-type’] )

重装系统那些事(1)

哎,前面不小心装电脑下班回家,把一直用的好好的笔记本摔坏了,把左上角的卡柱给摔断了,导致机身裂开,也无法合拢,自己尝试修复,也最终以失败告终。

然后我就去找修理师傅,修理师傅说,需要更换笔记本的底壳,我心想底壳更换有点麻烦,结果问了下价格,还要300元,我去,太贵了,本来就买个macpro,直接放着没用,想着用还有个的老神舟,结果神舟机都是2011年的机子了,结果能开机但无法使用。

想着说,以前的winpe盘不见了,准备找公司的桌面运维同事帮忙重装下,结果第二天拿到公司,同事说只有公司的系统镜像,额,这尴尬了,公司的系统镜像装上了有很多的限制呀,当时多问了一句,有没有其他的win10镜像,结果同事说没有,我也是惊了,专业的同事,连个系统镜像盘都没有,或许是不愿意吧。当然这个能理解。

如何修改docker-compose 默认的桥接网卡地址配置

在工作中,碰到了几次相同的场景,就是公司内部的网络地址是172.16.x.x,然后需要在主机上去安装部署一些服务,这些服务使用的是docker-compose的方式启动的,但是一启动,就会导致断开ssh的链接,经过查询,才发现原来docker-compose启动之后也自动生成一块网卡是172.16.x.x,与公司内部网络地址冲突了。

如何解决这个问题呢,其实也比较简单,在docker-compose之前需要先手动创建一个默认网卡,命令如下:

docker network create docker-compose_default –subnet 192.168.189.0/24

当然这个地址,你可以自定义,只要能区别开就可以了。