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

CasperJS经Squid代理发送POST请求返回HTTP 400错误求助

解决CasperJS POST请求触发Squid「double-CR」导致的HTTP 400错误

我之前也碰到过类似Squid搭配PhantomJS/CasperJS时的请求格式问题,这个「double-CR」错误本质是PhantomJS在构造POST请求时,可能额外插入了多余的回车换行符(CR),导致请求不符合HTTP规范,被Squid的严格校验拦截了。结合你的场景,给你几个可行的解决思路:

1. 手动编码POST请求体,避免自动序列化的坑

CasperJS默认的对象转表单数据可能会引入多余的空白字符,试试手动把参数转换成URL编码的字符串:

// 手动编码所有参数,避免自动序列化的格式问题
var postData = [
    'host=' + encodeURIComponent(hostID),
    'func=newjob',
    'apikey=' + encodeURIComponent(key),
    'test=' + encodeURIComponent(testing)
].join('&');

this.open('https://'+host+'/test.php?test=new1', { 
    method: 'post',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    },
    data: postData
});

手动编码能完全控制请求体的格式,避免CasperJS自动处理时插入多余的换行或空格。

2. 调整请求头,强制规范格式

给请求添加几个关键头,避免持久连接或格式兼容问题:

this.open('https://'+host+'/test.php?test=new1', { 
    method: 'post',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Connection': 'close', // 关闭持久连接,避免连接复用的格式问题
        'Accept-Encoding': 'identity' // 禁用压缩,减少格式解析歧义
    },
    data: { 
        'host':hostID, 
        'func':'newjob', 
        'apikey': key, 
        'test':testing 
    }
});

3. 启用调试模式,确认原始请求格式

启动CasperJS时加上调试参数,查看发送的原始请求内容,确认是不是真的有多余的CR:

casperjs your_script.js --web-security=false --debug=true

在输出里找类似POST /test.php?test=new1 HTTP/1.1的部分,重点检查请求头的结尾和请求体的开头,看是否出现了重复的\r\n。

4. 升级CasperJS/PhantomJS版本

老版本的PhantomJS(比如1.x分支)确实存在HTTP请求格式的bug,建议升级到PhantomJS 2.1.1或CasperJS 1.1.4这类稳定版本,很多这类格式问题在新版本里已经被修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:33:17