这两天发现群里又有人遇到inet.http在进行addHeaders时添加cookie不生效的问题,其实这个之前已经遇到过,并做了些分析
代码如下:(用http 和 whttp 做了比较)
首先php服务端代码:
<?php
session_start();
echo "_COOKIE => ";
print_r($_COOKIE);
?>
下面是aardio代码:
import console;
import inet;
import inet.http;
http = inet.http();
import inet.whttp;
whttp = inet.whttp();
url = "http://127.0.0.1:8903/c.php"
http.addHeaders = {cookie="aaa=asdfasdf"}
res = http.get(url); // 第一次访问用于触发session的存储,方便看到过程
..console.dump("第一次 http-get",res)
res = http.get(url);
..console.dump("第二次 http-get",res)
whttp.addHeaders = {cookie="aaa=asdfasdf"}
res = whttp.get(url);
..console.dump("第一次 whttp-get",res)// 第一次访问用于触发session的存储,方便看到过程
res = whttp.get(url);
..console.dump("第二次 whttp-get",res)
inet.setCookie("http://127.0.0.1:8903","kkkkk","vvvvv123123vvvv");
res = http.get(url);
..console.dump("第一次 inet.setCookie后 http-get",res)
console.pause(true);
看下返回结果:
对上面结果分析,可以看到所有的session添加的cookie都是可以在第二次正常访问。
但是在http的第一次访问,addHeaders添加的cookie无效,但是whttp的是有效的。
因为inet.http和web.form等共享cookie,其实需要通过inet.setCookie来设置cookie,通过这里进行设置后,访问就会生效。
这也是http和whttp的区别吧,如果实在不想折腾,仅仅用来做模拟访问,直接用whttp好了。
如果想用起来更适合自己,建议自行在http和whttp的基础上封装一个自己的http库,按自己常用的功能和习惯整理一下。
当然也可以尝试一些其他的第三方http访问库,这个也很不错。